题目链接:https://leetcode.com/problems/3sum-closest/
解题思路:
找三个数相加,保证他们加起来的和与目标数最接近,返回这个和。
1、老思路,先排序,固定第一个数,第二个数i+1,第三个数length-1。
2、设定一个min,先求和,如果target-sum更小,更新这个min,然后把这个sum保存下来。
3、如果taget直接等于sum,返回val,如果target更大,说明sum小了,所以第二个数就要往后挪。
1 class Solution { 2 public int threeSumClosest(int[] nums, int target) { 3 4 if(nums.length<3||nums==null) 5 return 0; 6 int val=0; 7 int min = Integer.MAX_VALUE; 8 Arrays.sort(nums); 9 for(int i=0;i<=nums.length-3;i++) 10 { 11 int low =i+1; 12 int high = nums.length-1; 13 14 while(low<high) 15 { 16 int sum = nums[i]+nums[low]+nums[high]; 17 if(Math.abs(target-sum)<min) 18 { 19 min = Math.abs(target-sum); 20 val = sum; 21 } 22 if(target==sum) 23 { 24 return val; 25 } 26 else if(target>sum) 27 { 28 low++; 29 } 30 else if(target<sum) 31 { 32 high--; 33 } 34 35 36 } 37 } 38 return val; 39 40 } 41 }