LC16 3Sum Closest

2020-07-27  本文已影响0人  Rookie118

本题链接: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 )


上一篇 下一篇

猜你喜欢

热点阅读