LeetCode-16 3Sum Closest

题目链接

同LeetCode15

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(), nums.end());  
        int min_closest = ~(1 << 31);
        int res = 0;
        int i = 0;
        while (i < nums.size())  
        {  
            int goal = -(nums[i] - target);  
            int j = i + 1;  
            int k = nums.size() - 1;  
              
            while (j < k)  
            {   
                if (nums[j] + nums[k] == goal)  
                {   
                    return target;
                }  
                else if (nums[j] + nums[k] < goal)  
                {
                    if (min_closest > abs(nums[i] + nums[j] + nums[k] - target))
                    {
                        min_closest = abs(nums[i] + nums[j] + nums[k] - target);
                        res = nums[i] + nums[j] + nums[k];
                    }
                    while (nums[++j] == nums[j - 1]);  
                }  
                else  
                {  
                    if (min_closest > abs(nums[i] + nums[j] + nums[k] - target))
                    {
                        min_closest = abs(nums[i] + nums[j] + nums[k] - target);
                        res = nums[i] + nums[j] + nums[k];
                    }
                    while (nums[--k] == nums[k + 1]);  
                }  
            }  
            while (nums[++i] == nums[i - 1]);  
        }  
        return res; 
    }
};

猜你喜欢

转载自blog.csdn.net/qq_30986521/article/details/80929064