LeetCode/solutions/16. 3Sum Closest.md

34 lines
1.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# [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;
}
};
```