1. 程式人生 > 其它 >力扣 leetcode 724. 尋找陣列的中心索引 (python)

力扣 leetcode 724. 尋找陣列的中心索引 (python)

技術標籤:pythonleetcodeleetcode演算法python資料結構

Topic

給你一個整數陣列 nums,請編寫一個能夠返回陣列 “中心索引” 的方法。
陣列 中心索引 是陣列的一個索引,其左側所有元素相加的和等於右側所有元素相加的和。
如果陣列不存在中心索引,返回 -1 。如果陣列有多箇中心索引,應該返回最靠近左邊的那一個。
注意:中心索引可能出現在陣列的兩端。

Example_1

輸入:nums = [1, 7, 3, 6, 5, 6]
輸出:3
解釋:
索引 3 (nums[3] = 6) 的左側數之和 (1 + 7 + 3 = 11),與右側數之和 (5 + 6 = 11) 相等。

同時, 3 也是第一個符合要求的中心索引。

Example_2

輸入:nums = [1, 2, 3]
輸出:-1
解釋:
陣列中不存在滿足此條件的中心索引。

Example_3

輸入:nums = [2, 1, -1]
輸出:0
解釋:
索引 0 左側不存在元素,視作和為 0 ;右側數之和為 1 + (-1) = 0 ,二者相等。

Example_4

輸入:nums = [0, 0, 0, 0, 1]
輸出:4
解釋:
索引 4 左側數之和為 0 ;右側不存在元素,視作和為 0 ,二者相等。

Tips

nums 的長度範圍為 [0, 10000]。
任何一個 nums[i] 將會是一個範圍在 [-1000, 1000]的整數。

Solution

先判空

之後可以把中間值想象為平衡木的支點
如果左邊重了(左邊數值大了)
則需要將支點向右移動
如果且好左邊和右邊相等
則支點就是中間值
如果無論從開頭開始怎麼右移支點都無法使左右相等
則不存在中間值

然後就是程式碼實現
設定支點node
先遍歷nums計算總共值total
total減去支點值減去右側值就是左側值

不斷像右移動node
直到滿足左側等於右側(total減right減node的值等於right的值)
直接返回node的值完成

若沒有出現相等的情況(沒有返回node)
直接返回-1

Code

class Solution:
    def pivotIndex
(self, nums: List[int]) -> int: if len(nums) == 0: return -1 node = 0 total = 0 for i in nums: total += i right = total - nums[0] while right * 2 != total - nums[node]: if node == len(nums) - 1: return -1 node += 1 right -= nums[node] return node

Result

在這裡插入圖片描述