首页 > 其他 > 详细

16.3Sum Closest

时间:2015-12-13 17:11:48      阅读:123      评论:0      收藏:0      [点我收藏+]

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

    For example, given array S = {-1 2 1 -4}, and target = 1.

    The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
先对数组进行排序,对于数组中的每一个数i,设置左右指针j,k分别指向其后面的一个数和数组最后一个数,当j<k时,求数i,j,k三者之和,如果其和target相等,直接返回target。如果其和target差值更小,更新最终的返回值。如果sum比target更大, 则j向左移动一位,反之,则sum比target更小,则j向右移动一位。最终返回和target差值最小的那个sum。
  1. class Solution {
  2. public:
  3. int threeSumClosest(vector<int>& nums, int target) {
  4. sort(nums.begin(),nums.end());
  5. int min=INT_MAX;
  6. int ret;
  7. for(int i=0;i<nums.size();i++){
  8. int j=i+1;
  9. int k=nums.size()-1;
  10. while(j<k){
  11. int sum=nums[i]+nums[j]+nums[k];
  12. int dif=abs(sum-target);
  13. if(dif<min){
  14. min=dif;
  15. ret=sum;
  16. }
  17. if(dif==0)
  18. return target;
  19. else if(sum>target)
  20. k--;
  21. else
  22. j++;
  23. }
  24. }
  25. return ret;
  26. }
  27. };





16.3Sum Closest

原文:http://www.cnblogs.com/zhoudayang/p/5043019.html

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