解題思路:這題解法跟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; } };
網誌管理員已經移除這則留言。
回覆刪除