題目鏈接
尋找數組的中心下標
給你一個整數數組 nums ,請計算數組的 中心下標 。
數組 中心下標 是數組的一個下標,其左側所有元素相加的和等于右側所有元素相加的和。
如果中心下標位于數組最左端,那么左側數之和視為 0 ,因為在下標的左側不存在元素。這一點對于中心下標位于數組最右端同樣適用。
如果數組有多個中心下標,應該返回 最靠近左邊 的那一個。如果數組不存在中心下標,返回 -1 。
問題分析
從中?下標的定義可知,除中?下標的元素外,該元素左邊的「前綴和」等于該元素右邊的「后綴和」。
? 因此,我們可以先預處理出來兩個數組,?個表?前綴和,另?個表?后綴和。
? 然后,我們可以??個 for 循環枚舉可能的中?下標,判斷每?個位置的「前綴和」以及「后綴和」,如果?者相等,就返回當前下標。
代碼解決
public int pivotIndex(int[] nums){int n = nums.length;int[] f = new int[n];int[] g = new int[n];//預處理前綴和 后綴和數組for (int i = 1; i <n ; i++)f[i] = f[i-1] + nums[i-1];for (int i = n-2;i >= 0; i--)g[i] = g[i+1] + nums[i+1];//使用for (int i = 0; i < n; i++) {if (f[i] == g[i])return i;}return -1;}