Leetcode 16 3Sum Closest

这道题和3sum非常类似。区别的一点就是一旦找到了answer就直接return了,而不需要做进一步的处理了。代码如下所示:

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int n = nums.size();
        int minValue = 0x7fffffff;
        int ret = 0;
        
        sort(nums.begin(), nums.end());
        
        for (int i=0; i<n-2; ++i) {
            int l = i + 1;
            int r = n - 1;
            
            while (l < r) {
                int sum = nums[i] + nums[l] + nums[r];
                
                if (sum == target) {
                    return target;
                }
                
                else if (sum < target) {
                    ++l;
                    if (target - sum < minValue) {
                        minValue = target - sum;
                        ret = sum;
                    }
                }
                
                else {
                    --r;
                    
                    if (sum - target < minValue) {
                        minValue = sum - target;
                        ret = sum;
                    }
                }
            }
            
            while (i < n-2 && nums[i] == nums[i+1]) {
                ++i;
            }
        }
        
        return ret;
    }
};

 

posted @ 2018-08-29 21:18  ly-bnu  阅读(77)  评论(0)    收藏  举报