mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
Create 16. 3Sum Closest.md
This commit is contained in:
parent
5bb9d7aeb6
commit
b255330c2f
33
16. 3Sum Closest.md
Normal file
33
16. 3Sum Closest.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# [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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user