leetcode_three_sum_closest 发表于 2016-11-22 难度:medium 解题思路可以参考3Sum。对数组进行排序,遍历第一个数,然后在比它大的数组中,从前往后、从后往前的遍历第二个数、第三个数,直到相遇。代码如下。 123456789101112131415161718192021222324252627282930313233class 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; }};