給你一個整數(shù)數(shù)組 nums 饺藤,請計算數(shù)組的 中心下標(biāo) 。
數(shù)組 中心下標(biāo) 是數(shù)組的一個下標(biāo),其左側(cè)所有元素相加的和等于右側(cè)所有元素相加的和辈赋。
如果中心下標(biāo)位于數(shù)組最左端,那么左側(cè)數(shù)之和視為 0 膏燕,因為在下標(biāo)的左側(cè)不存在元素钥屈。這一點對于中心下標(biāo)位于數(shù)組最右端同樣適用。
如果數(shù)組有多個中心下標(biāo)坝辫,應(yīng)該返回 最靠近左邊 的那一個篷就。如果數(shù)組不存在中心下標(biāo),返回 -1 近忙。
示例 1:
輸入:nums = [1,7,3,6,5,6]
輸出:3
解釋:
中心下標(biāo)是 3 竭业。
左側(cè)數(shù)之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,
右側(cè)數(shù)之和 sum = nums[4] + nums[5] = 5 + 6 = 11 及舍,二者相等未辆。
示例 2:
輸入:nums = [1, 2, 3]
輸出:-1
解釋:
數(shù)組中不存在滿足此條件的中心下標(biāo)。
示例 3:
輸入:nums = [2, 1, -1]
輸出:0
解釋:
中心下標(biāo)是 0 锯玛。
左側(cè)數(shù)之和 sum = 0 咐柜,(下標(biāo) 0 左側(cè)不存在元素)兼蜈,
右側(cè)數(shù)之和 sum = nums[1] + nums[2] = 1 + -1 = 0 。
來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/tvdfij
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有拙友。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán)为狸,非商業(yè)轉(zhuǎn)載請注明出處。
解題思路及方法
使用前綴和遗契。首先計算出整個數(shù)組的和total辐棒,然后開始從左遍歷數(shù)組,這樣保證答案是最靠近左邊的那一個牍蜂。
在遍歷的過程中漾根,用sum更新記錄前i個數(shù)的前綴和(包括i),那么第i個數(shù)右邊(不包括i)子數(shù)組的和就是total - sum捷兰,第i個數(shù)左邊(包括i)子數(shù)組的和就是sum - nums[i]立叛,判斷即可。
class Solution {
public int pivotIndex(int[] nums) {
// 計算整個數(shù)組的和
int total = 0;
for (int i : nums) {
total += i;
}
// 前綴和贡茅,記錄前i個數(shù)的和
int sum = 0;
// 從左邊開始遍歷秘蛇,當(dāng)sum - num[i] = total - sum時,說明第i個數(shù)左右兩邊和相等
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
if (sum - nums[i] == total - sum) return i;
}
return -1;
}
}
結(jié)果如下: