目錄
1.題目描述
2.題解
分析
具體實現
1.題目描述
給你一個整數數組 nums?,請計算數組的?中心下標?。
數組?中心下標?是數組的一個下標,其左側所有元素相加的和等于右側所有元素相加的和。
如果中心下標位于數組最左端,那么左側數之和視為?0
?,因為在下標的左側不存在元素。這一點對于中心下標位于數組最右端同樣適用。
如果數組有多個中心下標,應該返回?最靠近左邊?的那一個。如果數組不存在中心下標,返回 -1?。
示例
輸入:nums =?[1, 7, 3, 6, 5, 6]
輸出:3
中心下標mid 為3?
中心下標左側之和為 sum1 = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11
中心下標右側之和為 sum2 = nums[4] + nums[5] = 5 + 6 = 11
2.題解
分析
通過題目描述和給出的示例,我們可以發現中心下標左側數之和sum1與右側數之和sum2相等,且sum1 + sum2 + nums[mid] = 數組所有元素之和total,即?sum1*2 + nums[mid] = total
因此,我們從左開始遍歷數組,當nums[i] + sum1(左側數之和)*2 = total時,i即為數組的中心下標
具體實現
class Solution {public int pivotIndex(int[] nums) {//計算數組所有元素之和int total = 0;for (int i = 0; i < nums.length; i++) {total += nums[i];}//左側數之和int sum = 0;for (int i = 0; i < nums.length; i++) {//當左側數之和的2倍 + nums[i]為數組所有元素之和時,i為中心下標if(2*sum + nums[i] == total){return i;}else{//繼續遍歷數組sum += nums[i];}}//未找到中心下標,返回-1return -1;}
注:題目出自力扣,鏈接如下
724. 尋找數組的中心下標 - 力扣(LeetCode)