最接近的三數之和(給定一個包括 n 個整數的數組 nums 和 一個目標值 target。找出 nums 中的三個整數, 使得它們的和與 target 最接近。返回這三個數的和)


例如,給定數組 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; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM