【leetCode】16_最接近的三數之和
阿新 • • 發佈:2018-12-14
思路:先選定一個數,然後用經典的尋找兩數之和的做法。
詳細展開經典的尋找兩數之和的做法。
問題是:一個數組nums,一個數target,找到nums的兩個數的和與target最接近。
方法是nums排序,然後l指向0,r指向nums.size();如果nums[l] + nums[r] < target, l ++;如果nums[l] + nums[r] > target, r --。
所以整體的解法就是如下:
class Solution { public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int imin = 0x7fffffff; int l = 0, r = nums.size(); int ans; for (int i = 0; i < nums.size(); i ++){ l = 0; r = nums.size() - 1; int t = target - nums[i]; while (l < i && i < r){ if (abs(nums[l] + nums[r] - t) < imin){ ans = nums[l] + nums[i] + nums[r]; imin = abs(ans - target); } if (nums[l] + nums[r] < t){ l ++; } else{ r --; } } } return ans; } };