LeetCode16:3Sum Closest
阿新 • • 發佈:2019-01-07
思路:先將陣列排序,固定第一個數k,然後設定兩個指標i和j,i從k+1開始,j從nums.length-1開始,每次求nums[i]+nums[j]+nums[k]到target的距離,即絕對值。用一個變數儲存距離,一個變數儲存三個數的和,每次與之前的距離比較,如果比之前的距離小,則更新三個數的和,同時更新距離,如果nums[i]+nums[j]+nums[k]大於target,則將j左移,如果nums[i]+nums[j]+nums[k]小於target,則將i右移,以此縮小nums[i]+nums[j]+nums[k]與target的距離。
程式碼:
public class ThreeSumClosest { public static void main(String[] args) { int[] nums={-1, 2, 1, -4}; System.out.println(threeSumClosest(nums,1)); } public static int threeSumClosest(int[] nums, int target) { Arrays.sort(nums); int closest = Integer.MAX_VALUE; int abs = Integer.MAX_VALUE; for (int i = 0; i < nums.length-2; i++) { int left = i+1,right=nums.length-1; while(left<right) { int sum = nums[i]+nums[left]+nums[right]; if(Math.abs(sum-target)<abs){ closest = sum; abs = Math.abs(sum-target); } if(sum-target<0) left++; else if(sum-target>0) right--; else return sum; } } return closest; } }
輸出:2