美文网首页
LC16 3Sum Closest

LC16 3Sum Closest

作者: Rookie118 | 来源:发表于2020-07-27 08:41 被阅读0次

本题链接:3Sum Closest

本题标签:ArrayTwo Pointers

本题难度:\color{Orange}{Medium}

英文题目 中文题目

方案1:

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        if(nums.size() < 3)
            return 0;
        
        int res = 0, min_distance = INT_MAX;
        sort(nums.begin(), nums.end());
        
        for(int i = 0; i < nums.size(); ++i)
        {
            int left = i + 1, right = nums.size() - 1;
            bool flag_equal = false;
            while(left < right)
            {
                if(abs(nums[left] + nums[right] + nums[i] - target) < min_distance)
                {
                    min_distance = abs(nums[left] + nums[right] + nums[i] - target);
                    res = nums[left] + nums[right] + nums[i];
                }
                
                if(nums[left] + nums[right] + nums[i] < target)
                    ++left;
                else if(nums[left] + nums[right] + nums[i] > target)
                    --right;   
                else
                {
                    flag_equal = true;
                    res = target;
                    break;
                } 
            }
            if(flag_equal)
                break;

            while(i + 1 < nums.size() && nums[i] == nums[i + 1])
                ++i;  
        }
        return res;
    }
};

时间复杂度:O ( N logN )

空间复杂度:O ( N )


相关文章

网友评论

      本文标题:LC16 3Sum Closest

      本文链接:https://www.haomeiwen.com/subject/jumalktx.html