最近在學習 Java 相關知識,看到了一道關于兩個子數組和最接近的問題。這里分享一下我的解決思路。
首先,我們可以先計算出整個數組的和 sum,然后分別從左往右和從右往左遍歷該數組,記錄下當前子數組的和 leftSum 和 rightSum,同時維護一個變量 diff 記錄兩個子數組和的最小差值。
int diff = Integer.MAX_VALUE; // 初始化差值為最大值 int leftSum = 0; int rightSum = sum; for (int i = 0; i< nums.length; i++) { leftSum += nums[i]; rightSum -= nums[i]; diff = Math.min(diff, Math.abs(leftSum - rightSum)); }
上面的代碼實現了從左往右遍歷的過程,接下來我們再從右往左遍歷一遍,取左右遍歷的最小值作為最終的差值。
int leftSum = sum; int rightSum = 0; for (int i = nums.length - 1; i >= 0; i--) { leftSum -= nums[i]; rightSum += nums[i]; diff = Math.min(diff, Math.abs(leftSum - rightSum)); }
最后的 diff 就是兩個子數組和最接近的值。