leetcode 16.最接近的三数之和
Posted bejm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 16.最接近的三数之和相关的知识,希望对你有一定的参考价值。
给定一个包括 n 个整数的数组 nums
和 一个目标值 target
。找出 nums
中的三个整数,使得它们的和与 target
最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end()); //将数组从小到大排列
int min = nums[0] + nums[1] + nums[2]; //设min为最小,假设nums[0]+nums[1]+nums[2]为最小
for(int i = 0; i < nums.size() - 2; i++){
int m = i + 1; //m为左指针,为i+1
int n = nums.size() - 1; //n为右指针,n为数组最后一个下标
while(m < n){ //当左指针小于右指针
int sum = nums[i] + nums[m] +nums[n]; //求出三个数之和
if(abs(sum - target) < abs(min - target)) min =sum; //如果sum-target的绝对值小于min-target的绝对值,那么使得min=sum
if(sum < target) m++; //如果sum<target,左指针右移使得数组中的数值增大
else if(sum > target) n--; //如果sum>target,右指针左移使得数组中的数值减小
else return target; //如果sum=target,那么直接返回target
}
}
return min; //最后返回最小值min
}
};
以上是关于leetcode 16.最接近的三数之和的主要内容,如果未能解决你的问题,请参考以下文章