diff --git a/16. 3Sum Closest.md b/16. 3Sum Closest.md new file mode 100644 index 0000000..653a559 --- /dev/null +++ b/16. 3Sum Closest.md @@ -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& 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; + } +}; +```