問(wèn)題鏈接:尋找數(shù)組中心索引
問(wèn)題描述:
給定一個(gè)整數(shù)類型的數(shù)組 nums妓笙,請(qǐng)編寫一個(gè)能夠返回?cái)?shù)組“中心索引”的方法。
我們是這樣定義數(shù)組中心索引的:數(shù)組中心索引的左側(cè)所有元素相加的和等于右側(cè)所有元素相加的和能岩。
如果數(shù)組不存在中心索引寞宫,那么我們應(yīng)該返回 -1。如果數(shù)組有多個(gè)中心索引捧灰,那么我們應(yīng)該返回最靠近左邊的那一個(gè)淆九。
示例 1:輸入: nums = [1, 7, 3, 6, 5, 6] 輸出: 3 解釋: 索引3 (nums[3] = 6) 的左側(cè)數(shù)之和(1 + 7 + 3 = 11)统锤,與右側(cè)數(shù)之和(5 + 6 = 11)相等毛俏。 同時(shí), 3 也是第一個(gè)符合要求的中心索引。
示例 2:
輸入: nums = [1, 2, 3] 輸出: -1 解釋: 數(shù)組中不存在滿足此條件的中心索引饲窿。
說(shuō)明:
nums 的長(zhǎng)度范圍為 [0, 10000]煌寇。
任何一個(gè) nums[i] 將會(huì)是一個(gè)范圍在 [-1000, 1000]的整數(shù)。
解答思路
因?yàn)橹行乃饕淖髠?cè)和與右側(cè)和相等逾雄,所以如果中心索引存在的話阀溶,則數(shù)組和 = 左側(cè)和 × 2 + 中心索引處的值
腻脏。
根據(jù)這個(gè)思想,我們只要:
- 一次遍歷银锻,把數(shù)組和算出來(lái)
- 第二次遍歷永品,找出滿足上述公式的索引
- 如果數(shù)組遍歷完后仍未找到滿足公式的索引,則中心索引不存在
根據(jù)上述步驟击纬,此題便可得解鼎姐。
答題代碼(Java)
class Solution {
public int pivotIndex(int[] nums) {
int sum = 0;
// 計(jì)算數(shù)組和
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
}
int res = -1;
int leftSum = 0;
for (int i = 0; i < nums.length; i++) {
// 如果當(dāng)前位置的左側(cè)和 * 2 + 當(dāng)前值 = 數(shù)組和,即為中心索引
if (leftSum * 2 + nums[i] == sum) {
res = i;
break;
}
// 累計(jì)左側(cè)和
leftSum += nums[i];
}
return res;
}
}