您好,登錄后才能下訂單哦!
這篇文章主要介紹LeetCode如何解決數組中心索引問題,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
題目描述:
給定一個整數類型的數組 nums
,請編寫一個能夠返回數組 “中心索引” 的方法。
中心索引 :數組中心索引的左側所有元素相加的和等于右側所有元素相加的和。
如果數組不存在中心索引,那么我們應該返回 -1。如果數組有多個中心索引,那么我們應該返回最靠近左邊的那一個
示例:
輸入:nums = [1, 7, 3, 6, 5, 6]輸出:3解釋:索引 3 (nums[3] = 6) 的左側數之和 (1 + 7 + 3 = 11),與右側數之和 (5 + 6 = 11) 相等。同時, 3 也是第一個符合要求的中心索引
輸入:nums = [1, 2, 3]輸出:-1解釋:數組中不存在滿足此條件的中心索引
說明:
nums
的長度范圍為 [0, 10000]
任何一個 nums[i]
將會是一個范圍在 [-1000, 1000]
的整數
第一次嘗試
想法:利用一個index標號從數組頭開始移動,設置left_nums和right_nums兩個參數計算左邊和右邊和
注意:
left_nums和right_nums要在循環中,因為每一次要重置
數組可能存在負數,所以也可能存在第一個元素或最后一個元素是中心索引
運行結果:
由于循環太多,導致時間效率較低
本文由“壹伴編輯器”提供技術支持
第一次優化
減少循環:靈活利用數組切片
內存參數減少了,空間消耗減小,但是時間效率依然較低
本文由“壹伴編輯器”提供技術支持
最終優化方法
思路:若index是中心索引,則左邊和=右邊和,這樣的話可以引入公式:
S(數組總和)= left_nums(左邊和)*2 + nums[index]
故只需要動態計算左邊和left_nums即可(又減少了一個參數)
動態計算:先判斷是否是中心索引,再移動index,并計算左邊和left_nums即可
特殊現象:左邊和left_nums和索引標號的移動是同步的,當索引標號右移動一位時,left_nums也就加上上一個索引對應的值
以上是“LeetCode如何解決數組中心索引問題”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。