1 class Solution {
 2 public:
 3     int threeSumClosest(vector<int>& nums, int target) {
 4         int res,sum2,cursum2,curdiff,left,right;
 5         int mindiff=INT_MAX;
 6         int sz=nums.size();
 7         sort(nums.begin(),nums.end());
 8         for(int i=0;i<sz-2;i++){
 9             if(i>0&&nums[i]==nums[i-1])
10                 continue;
11             sum2=target-nums[i];
12             left=i+1;
13             right=sz-1;
14             while(left<right){
15                 cursum2=nums[left]+nums[right];
16                 if(cursum2==sum2)
17                     return target;
18                 curdiff=abs(sum2-cursum2);
19                 if(curdiff<mindiff){
20                     res=nums[i]+cursum2;
21                     mindiff=curdiff;
22                 }
23                 if(cursum2<sum2){
24                     ++left;
25                     while(left<right&&nums[left]==nums[left-1])
26                         ++left;
27                 }   
28                 else{
29                     --right;
30                     while(left<right&&nums[right]==nums[right+1])
31                         --right;
32                 }
33             }
34         }
35         return res;
36     }
37 };

找和目标值最接近的三个数字和,类似三和问题,只是可以不用管数字重叠,并且要多设置一个统计最小差值的变量

posted on 2018-07-04 13:31  高数考了59  阅读(113)  评论(0)    收藏  举报