题目描述 16. 最接近的三数之和
代码
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(),nums.end());
int value=nums[0]+nums[1]+nums[2];
int n=nums.size();
for(int i=0;i<n-2;++i){
int left=i+1;
int right=n-1;
while(left<right){
int sum=nums[i]+nums[left]+nums[right];
if(target==sum){
return sum;
}
else if(target>sum){
value=abs(target-sum)>abs(value-target)?value:sum;
left++;
}
else{
value=abs(target-sum)>abs(value-target)?value:sum;
right--;
}
}
}
return value;
}
};
思路
排序,value初值肯定是最小和的三位数。遍历,i是三个数中第一个数,left和right为第二、三个数,sum为每次遍历后实时的值,每次遍历后与target进行比较,=target则直接输出,>target则需要减小(right–),<target则需要增大(left++),每次遍历更新最合适的值,即value。