
难度:medium
解题思路可以参考3Sum。对数组进行排序,遍历第一个数,然后在比它大的数组中,从前往后、从后往前的遍历第二个数、第三个数,直到相遇。
代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
class Solution { public: int threeSumClosest(vector<int>& nums, int target) { if(nums.size() < 3) return {}; sort(nums.begin(),nums.end()); int ret=nums[0]+nums[1]+nums[2]; for(int i = 0; i < nums.size()-2; i++) { if(i!=0 && nums[i]==nums[i-1])continue; // cout<<"number:"<<nums[i]<<endl; int low = i+1; int high = nums.size()-1; while(low < high) { if(low!=i+1 && nums[low]==nums[low-1]) {low++;continue;} if(high!=nums.size()-1&&nums[high]==nums[high+1]) {high--;continue;} int sum = nums[i]+nums[low]+nums[high]; if(abs(sum-target) < abs(ret-target)) ret = sum; if(sum == target) { ret = sum; low++; } else if(sum > target) high--; else low++; } } return ret; } };
|
近期评论