力扣每日刷題(1)
阿新 • • 發佈:2021-11-29
尋找陣列的中心索引
給你一個整數陣列nums ,請計算陣列的 中心下標 。
陣列 中心下標 是陣列的一個下標,其左側所有元素相加的和等於右側所有元素相加的和。
如果中心下標位於陣列最左端,那麼左側數之和視為 0 ,因為在下標的左側不存在元素。這一點對於中心下標位於陣列最右端同樣適用。
如果陣列有多箇中心下標,應該返回 最靠近左邊 的那一個。如果陣列不存在中心下標,返回 -1 。
示例 1:
輸入:nums = [1, 7, 3, 6, 5, 6]
輸出:3
解釋:
中心下標是 3 。
左側數之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,
右側數之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。
示例 2:
輸入:nums = [1, 2, 3]
輸出:-1
解釋:
陣列中不存在滿足此條件的中心下標。
示例 3:
輸入:nums = [2, 1, -1]
輸出:0
解釋:
中心下標是 0 。
左側數之和 sum = 0 ,(下標 0 左側不存在元素),
右側數之和 sum = nums[1] + nums[2] = 1 + -1 = 0 。
提示:
1 <= nums.length <= 104
-1000 <= nums[i] <= 1000
先說下程式碼的思路: 建立三個變數,分別是代表 總值,左邊的和值,臨時值 先將總值得出 再將總值減去第一個值判斷是否為0(如果是0則代表左右兩邊無值,只有一個數) 然後進行一個迴圈 將臨時值加入陣列的值 臨時值再在陣列下標大於0的時候減去陣列值,此時得到的值是左邊的和 然後進行一個while迴圈,如果左邊的和等於總值減去臨時值(這個值得出來等於右邊的值)就返回值出去
class Solution { public int pivotIndex(int[] nums) { int left_num = 0; int sum = 0; int temp = 0; for(int i = 0; i < nums.length; i++){ sum += nums[i]; } if(sum - nums[0] == 0){ return 0; } for(int i = 0; i < nums.length; i++){ temp+= nums[i]; if(i != 0){ left_num = temp - nums[i]; } while(left_num == sum - temp){ return i; } } return -1; } }