2017年6月28日 星期三

leetcode-16 3Sum Closest

題意:給定一數組和目標數,找出最接近目標數的三數和


解題思路:這題解法跟3Sum 類似,只是判定移動start或end的標準改為三數和與target的差值


c++ code如下:

 
class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());
        int len=nums.size();
        int ans=nums[0]+nums[1]+nums[2];
        for(int i=0;i<len-2;i++)
        {
            if(nums[i-1]==nums[i]&&i)
                continue;
            int start=i+1; 
            int end=len-1;
            while(start!=end)
            {
                if(nums[i]+nums[start]+nums[end]-target==0)
                    return target;
                else if(nums[i]+nums[start]+nums[end]-target>0)
                {
                    if(abs(ans-target)>nums[i]+nums[start]+nums[end]-target)
                        ans=nums[start]+nums[end]+nums[i];
                    end--;
                }
                else
                {
                    if(abs(ans-target)>abs(nums[i]+nums[start]+nums[end]-target))
                        ans=nums[start]+nums[end]+nums[i];
                    start++; 
                }
            }
        }
        return ans;
    }
    
    int abs(int k)
    {
        if(k<0)
            return -k;
        else
            return k;
    }
};

1 則留言: