首页 > 其他 > 详细

leetcode-3Sum Closest-16

时间:2016-08-30 01:44:20      阅读:129      评论:0      收藏:0      [点我收藏+]

输入一组数字,任选三个数字,求这三个数字加起来最接近某一值的和。

枚举三个数字的话ON^3

更高效的方法,利用了求一组数字中两个数字的和的方法,即用两个指针指向首尾往中间移动,前提是数组有序,所以先排序。遍历数组,然后用两个指针指向这个元素后面序列的首尾,如果这三个数字的和到target的距离比之前的ans到target的距离更小,就更新ans,然后移动后面两个指针:如果当前和大于target,后面的指针往前移,如果小于,前面的指针后移。时间ON^2

 1 class Solution {
 2 public:
 3     int threeSumClosest(vector<int>& nums, int target) {
 4         if(nums.size()<3) return 0;
 5         sort(nums.begin(),nums.end());
 6         int ans=nums[0]+nums[1]+nums[2];
 7         for(int i=0;i<nums.size();i++){
 8             int j=i+1,k=nums.size()-1;
 9             while(j<k){
10                 int sum=nums[j]+nums[k]+nums[i];
11                 if(sum==target) return target;
12                 if(sum<target) j++;
13                 else k--;
14                 int tmp=abs(sum-target);
15                 if(tmp<abs(ans-target)) ans=sum;
16             } 
17         }
18         return ans;
19     }
20 };

 

leetcode-3Sum Closest-16

原文:http://www.cnblogs.com/0summer/p/5820238.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!