59-最接近的三数之和
给一个包含 n 个整数的数组 S, 找到和与给定整数 target 最接近的三元组,返回这三个数的和。
注意事项
只需要返回三元组之和,无需返回三元组本身
样例
例如 S = [-1, 2, 1, -4] and target = 1. 和最接近 1 的三元组是 -1 + 2 + 1 = 2.
挑战
O(n^2) 时间, O(1) 额外空间。
标签
排序 数组 两根指针
思路
延续三数之和的思路,实时更新最接近的三数和
code
class Solution {
public:
/**
* @param numbers: Give an array numbers of n integer
* @param target: An integer
* @return: return the sum of the three integers, the sum closest target.
*/
int threeSumClosest(vector<int> nums, int target) {
// write your code here
int size = nums.size();
if(size < 3) {
return 0;
}
sort(nums.begin(),nums.end());
int ans = 0x7FFFFFFF, i = 0, j = 0, k = 0;
for(i=0; i<size; i++) {
for(j=i+1, k=size-1; j<k;){
int sum = nums[i] + nums[j] + nums[k];
ans = abs(target-sum) < abs(target-ans) ? sum : ans;
if(sum > target) {
k--;
}
else if(sum < target) {
++j;
}
else {
return sum;
}
}
}
return ans;
}
};