LeetCode/solutions/16. 3Sum Closest.md

34 lines
1.2 KiB
Markdown
Raw Normal View History

2018-12-15 13:38:09 +00:00
# [16. 3Sum Closest](https://leetcode.com/problems/3sum-closest/)
# 思路
类似[15. 3Sum](https://leetcode.com/problems/3sum/),先对数组进行排序外层循环就是遍历一遍数组内层循环就是用两个指针low和high与3sum不同的就是
每次循环要判断记录当前sum和target的差值。
时间复杂度O(n^2)
# C++
``` C++
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int len = nums.size();
long long res=nums[0] + nums[1] + nums[2], min_gap, sum, curr_gap; // 防止溢出所以用long long型
min_gap = abs(res - target);
sort(nums.begin(), nums.end());
for(int i = 0; i < len - 2; i++){
int low = i + 1, high = len - 1;
while(low < high){
sum = nums[i] + nums[low] + nums[high];
curr_gap = abs(sum - target);
if(curr_gap < min_gap){
res = sum;
min_gap = curr_gap;
}
if(target < sum) high--;
else if(target > sum) low++;
else return target;
} // low == high
}
return res;
}
};
```