LeetCode-3SumClosest

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

题目:

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).

思路:

和3sum一样,排序之后,先确定第一个元素,然后对余下元素进行两边夹。

packagesum;importjava.util.Arrays;publicclassThreeSumClosest {publicintthreeSumClosest(int[] nums,inttarget) {intlen =nums.length;

Arrays.sort(nums);intdelta = nums[0] + nums[1] + nums[2] -target;for(inti = 0; i < len - 2;) {intl = i + 1;intr = len - 1;while(l <r) {inttmp = nums[i] + nums[l] + nums[r] -target;if(Math.abs(tmp) <Math.abs(delta))

delta=tmp;if(tmp == 0)returntarget;if(tmp < 0)++l;else--r;

}do{ ++i; }while(i < len && nums[i] == nums[i - 1]);

}returntarget +delta;

}publicstaticvoidmain(String[] args) {//TODO Auto-generated method stubint[] nums = { -1, 2, 1, -4};inttarget = 1;

ThreeSumClosest t=newThreeSumClosest();

System.out.PRintln(t.threeSumClosest(nums, target));

}

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航