例如,給定數組 nums = [-1,2,1,-4], 和 target = 1.
與 target 最接近的三個數的和為 2. (-1 + 2 + 1 = 2).
思路:首先對數組進行排序 Arrays.sort(arr);
將前三個數相加賦給closeNum,表示初始化 int closeNum = arr[0] + arr[1] + arr[2];
在第一層循環中for(int i = 0;i<arr.length;i++),我們定義雙指針就j和k,j指向當前i的下一個元素,k指向末尾元素,計算三數之和並且賦給tmp,int tmp = arr[i]+arr[j]+arr[k]; 判斷Math.abs(tmp - t) 和 Math.abs(closeNum - t)的大小,前者小,將前者賦給初始變量closeNum;之后判斷tmp和目標值t的大小,大於 k--;小於j++,等於 直接返回tmp
代碼如下:
public static int threeSumClosest(int[] arr,int t) { Arrays.sort(arr); int closeNum = arr[0] + arr[1] + arr[2]; for(int i = 0;i<arr.length - 2;i++) { int j = i+1; int k = arr.length - 1; while(j<k) { int tmp = arr[i]+arr[j]+arr[k]; if(Math.abs(tmp - t) < Math.abs(closeNum - t)) { closeNum = tmp; } if(tmp < t) { j++; }else if(tmp > t) { k--; }else { return tmp; } } } return closeNum; }