活用天秤模型: 尋找平衡軸心點_Leetcode Find Pivot Index #724

閱讀時間約 5 分鐘

這題的題目在這裡:Find Pivot Index

題目敘述

題目會給我們一個整數陣列nums,要求我們計算平衡軸心點在哪?

平衡軸心的意思就是軸心點索引左側的元素總合 = 軸心點索引右側的元素總合

例如

整數陣列nums=[1,2,2,7,2,3]

7左側的元素總合為 1 + 2 + 2 = 5

7右側的元素總合為 2 + 3 = 5

所以7是平衡位置,其索引位置為3

所以平衡軸心索引位置 = 3

答案為3


測試範例

Example 1:

Input: nums = [1,7,3,6,5,6]
Output: 3
Explanation:
The pivot index is 3.
Left sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11
Right sum = nums[4] + nums[5] = 5 + 6 = 11

Example 2:

Input: nums = [1,2,3]
Output: -1
Explanation:
There is no index that satisfies the conditions in the problem statement.

Example 3:

Input: nums = [2,1,-1]
Output: 0
Explanation:
The pivot index is 0.
Left sum = 0 (no elements to the left of index 0)
Right sum = nums[1] + nums[2] = 1 + -1 = 0 

約束條件

Constraints:

  • 1 <= nums.length <= 10^4
  • -1000 <= nums[i] <= 1000

演算法

這題除了古典的prefix sum前綴和的演算法之外,還有一個精彩巧妙的問題簡化技巧可以使用,就是天秤秤重的模型。


每個整數想成重量不一的砝碼,數字小的就是小砝碼,數字大的就是大砝碼。

原本軸心點索引左側的元素總合 = 軸心點索引右側的元素總合 就轉化成

中小學學過的經典秤重問題請問軸心點移到哪,左右兩側總重量等重,天平達到平衡


一開始讓左邊的盤子為空,總重量=0

讓右邊的盤子放上全部的砝碼,總重量 = 陣列元素總合。


接著,開始迭代,從右邊的盤子拿一個砝碼下來,假如達到平衡,則當下的索引i就是平衡的軸心點索引
假如還沒達到平衡,則把這個砝碼放到左邊的盤子。接著反覆進行下一回合的迭代。

如果到最後,都沒辦法達成平衡,代表無解,返回-1


解說動畫

raw-image

程式碼

class Solution:
 def pivotIndex(self, nums: List[int]) -> int:
  
  # Initialization:
  # Left hand side be empty, and
  # Right hand side holds all weights.
  total_weight_on_left, total_weight_on_right = 0, sum(nums)

  for idx, current_weight in enumerate(nums):

   total_weight_on_right -= current_weight

   if total_weight_on_left == total_weight_on_right:
    # balance is met on both sides
    # i.e., sum( nums[ :idx] ) == sum( nums[idx+1: ] )
    return idx

   total_weight_on_left += current_weight

  return -1

複雜度分析

時間複雜度: O(n)

線性掃描,掃過每顆砝碼,總共耗時O(n)


空間複雜度: O(1)

所用到的都是固定尺寸的臨時變數,為常數級別O(1)


關鍵知識點

這題除了古典的prefix sum前綴和的演算法之外,有興趣的讀者可以試著寫寫看。

(提示: prefix sum前綴和 可以在O(1)時間內求出range sum區間和)


還有一個精彩巧妙的問題簡化技巧可以使用,就是天秤秤重的模型。


每個整數想成重量不一的砝碼,數字小的就是小砝碼,數字大的就是大砝碼。

原本軸心點索引左側的元素總合 = 軸心點索引右側的元素總合 就轉化成

中小學學過的經典秤重問題請問軸心點移到哪,左右兩側總重量等重,天平達到平衡


Reference:

[1] Python/Go/Java/JS/C++ O(n) sol. by Balance scale. [w/ explanation] - Find Pivot Index - LeetCode

82會員
418Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
題目會給我們一個整數陣列nums,裡面都是正整數,而且陣列長度保證是偶數。 要求我們倆倆將所有整數配對成一組pair,要求我們最小化pair sum的極大值。
這題的題目在這裡:Gray Code 題目敘述 題目會給我們一個bit寬度n,要求我們造出所有格雷編碼。 格雷編碼就是一組二進位編碼,每兩個相鄰的編碼的hamming distance都是1。 如果第一次接觸的讀者,可以參考 Wiki Gray Code
題目會給我們一個字串陣列nums,內容都是二進位字串,要求我們造出一個另一個相等長度,新的二進位字串,而且不和字串陣列nums內的重複。 答案可能有不只一組,回傳合任一組合法的答案皆可。
題目會給我們一個字串s,內容都是由英文小寫字母組成,要求我們計算長度為3的回文子序列有多少個? 舉例,aba者種形式的序列,就是長度為3的回文序列。
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
題目會給我們一個整數陣列nums,裡面都是正整數,而且陣列長度保證是偶數。 要求我們倆倆將所有整數配對成一組pair,要求我們最小化pair sum的極大值。
這題的題目在這裡:Gray Code 題目敘述 題目會給我們一個bit寬度n,要求我們造出所有格雷編碼。 格雷編碼就是一組二進位編碼,每兩個相鄰的編碼的hamming distance都是1。 如果第一次接觸的讀者,可以參考 Wiki Gray Code
題目會給我們一個字串陣列nums,內容都是二進位字串,要求我們造出一個另一個相等長度,新的二進位字串,而且不和字串陣列nums內的重複。 答案可能有不只一組,回傳合任一組合法的答案皆可。
題目會給我們一個字串s,內容都是由英文小寫字母組成,要求我們計算長度為3的回文子序列有多少個? 舉例,aba者種形式的序列,就是長度為3的回文序列。
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
目前需要檢視過去的現實,也就是物質上的人事物,根源原因可能是因為逃避、害怕改變,造成的結果是現在可能會對於經濟狀況、人際關係以及情感上的過度忽略,導致狀況有點緊張。囤積物品或者是囤積過去的記憶也是其中一種外在表現狀況,內心是因為缺乏安全感或是對自己沒有自信,也不相信身邊的人,也許其中有願意幫助你的人
Thumbnail
當情緒低落降臨時,生活似乎變得沉重而困難。這種情緒常常伴隨著悲傷、無力感和對未來的不確定感。但是,不要忘記,每個人都會經歷低落的時刻,這是生命中不可避免的一部分。重要的是,我們學會如何應對和走出情緒低谷。 首先,讓我們理解低落情緒的根源。它可能是由於生活中的壓力、失去親人、工作不順遂或其他困難情況
今天是一個充實而忙碌的一天,我葉瀚林對於工作和健身的平衡感又有了更深的體會。作為一家智慧家居公司的創辦人和CEO,我的工作時間往往不受拘束,需要面對各種挑戰和責任。然而,我也深知保持身心健康的重要性,所以將健身納入了我的日常生活中。 早上,我起床後就迫不及待地穿上運動裝,前往健身房。
Thumbnail
自然界的光、水、空氣…等元素,讓植物、動物得巳延續生命。 人類世界;探討的是心靈上的平衡。 一顆失衡的心,會讓自己情緒低落亦或是爆躁…等,無法心平氣和聆聽深沈的聲音,頓時失去依靠,沒有後援可以支持和幫助時,生命可能因此殞落…。 新聞報導著:「某醫學院休學一年,今年一月將復學的學生上吊身亡…」,只
Thumbnail
在這個繽紛多彩的人生旅途中,我們總是會經歷起伏不定的挑戰和失敗。然而,無論處於何種階段,遇到怎樣的挫折,我們都需要學會擁有「創新勇氣」這一重要概念。
Thumbnail
體悟1 - 理解筆記和地圖的角色:筆記就如同「園藝師」的種子,它們是我學習的起點,我會根據我的興趣和需要去收集和創造這些種子。然而,地圖則更像是「工程師」的設計圖,它將這些散落的筆記有條理地組織起來,為我的學習建立結構。 體悟2 - 創建自我學習的循環:在創造筆記(次原子想法)和整理學習地圖(原紫短
Thumbnail
致謝 上報 刊登本文:https://www.upmedia.mg/news_info.php?Type=2&SerialNo=174429 台灣的Metoo撇除政黨政治層面的問題,單就性別這一塊來討論,我認為是有些可惜的地方,亦即作為後進的我們並沒有從前驅者學習到教訓。 首先是作為Metoo運動的
Thumbnail
I Don't wanna talk about this. 有時候我們會做出一些行為,不可言喻卻別無選擇,生活可能會發生一些事,把人逼向絕路,幸運的分配就這麼多,不見得每個人都有機會嘗到甜頭。 《FBI通緝要犯》(英語:FBI: Most Wanted)是一個由René Balcer創作,沃爾夫影
Thumbnail
身、心、系統。 人生就是要找平衡點。 身、心、系統。 每一天都在尋找平衡點、這是一個自然的現象、否則我們就會和容易一邊倒、身體系統會超支、心靈的平靜受到干擾、人生也會慢慢的失去意義⋯⋯ 所以究竟要如何達到這個平衡? 改善自己、修正你的弱點、強化自己… 不是我是否能做到這些動作、而是這些動作如何幫我恢
Thumbnail
暫時離開職場,回家休養身心後,九月中我回到原本的工作崗位。回到同樣的工作有其風險,尤其如果促發憂鬱症發作的因子還在,就會是很大的挑戰。如今,我已經工作兩個月了,身心維持得相當穩定。我做了什麼使得自己能保持良好狀態?我會說是-「不放棄」的精神。
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
目前需要檢視過去的現實,也就是物質上的人事物,根源原因可能是因為逃避、害怕改變,造成的結果是現在可能會對於經濟狀況、人際關係以及情感上的過度忽略,導致狀況有點緊張。囤積物品或者是囤積過去的記憶也是其中一種外在表現狀況,內心是因為缺乏安全感或是對自己沒有自信,也不相信身邊的人,也許其中有願意幫助你的人
Thumbnail
當情緒低落降臨時,生活似乎變得沉重而困難。這種情緒常常伴隨著悲傷、無力感和對未來的不確定感。但是,不要忘記,每個人都會經歷低落的時刻,這是生命中不可避免的一部分。重要的是,我們學會如何應對和走出情緒低谷。 首先,讓我們理解低落情緒的根源。它可能是由於生活中的壓力、失去親人、工作不順遂或其他困難情況
今天是一個充實而忙碌的一天,我葉瀚林對於工作和健身的平衡感又有了更深的體會。作為一家智慧家居公司的創辦人和CEO,我的工作時間往往不受拘束,需要面對各種挑戰和責任。然而,我也深知保持身心健康的重要性,所以將健身納入了我的日常生活中。 早上,我起床後就迫不及待地穿上運動裝,前往健身房。
Thumbnail
自然界的光、水、空氣…等元素,讓植物、動物得巳延續生命。 人類世界;探討的是心靈上的平衡。 一顆失衡的心,會讓自己情緒低落亦或是爆躁…等,無法心平氣和聆聽深沈的聲音,頓時失去依靠,沒有後援可以支持和幫助時,生命可能因此殞落…。 新聞報導著:「某醫學院休學一年,今年一月將復學的學生上吊身亡…」,只
Thumbnail
在這個繽紛多彩的人生旅途中,我們總是會經歷起伏不定的挑戰和失敗。然而,無論處於何種階段,遇到怎樣的挫折,我們都需要學會擁有「創新勇氣」這一重要概念。
Thumbnail
體悟1 - 理解筆記和地圖的角色:筆記就如同「園藝師」的種子,它們是我學習的起點,我會根據我的興趣和需要去收集和創造這些種子。然而,地圖則更像是「工程師」的設計圖,它將這些散落的筆記有條理地組織起來,為我的學習建立結構。 體悟2 - 創建自我學習的循環:在創造筆記(次原子想法)和整理學習地圖(原紫短
Thumbnail
致謝 上報 刊登本文:https://www.upmedia.mg/news_info.php?Type=2&SerialNo=174429 台灣的Metoo撇除政黨政治層面的問題,單就性別這一塊來討論,我認為是有些可惜的地方,亦即作為後進的我們並沒有從前驅者學習到教訓。 首先是作為Metoo運動的
Thumbnail
I Don't wanna talk about this. 有時候我們會做出一些行為,不可言喻卻別無選擇,生活可能會發生一些事,把人逼向絕路,幸運的分配就這麼多,不見得每個人都有機會嘗到甜頭。 《FBI通緝要犯》(英語:FBI: Most Wanted)是一個由René Balcer創作,沃爾夫影
Thumbnail
身、心、系統。 人生就是要找平衡點。 身、心、系統。 每一天都在尋找平衡點、這是一個自然的現象、否則我們就會和容易一邊倒、身體系統會超支、心靈的平靜受到干擾、人生也會慢慢的失去意義⋯⋯ 所以究竟要如何達到這個平衡? 改善自己、修正你的弱點、強化自己… 不是我是否能做到這些動作、而是這些動作如何幫我恢
Thumbnail
暫時離開職場,回家休養身心後,九月中我回到原本的工作崗位。回到同樣的工作有其風險,尤其如果促發憂鬱症發作的因子還在,就會是很大的挑戰。如今,我已經工作兩個月了,身心維持得相當穩定。我做了什麼使得自己能保持良好狀態?我會說是-「不放棄」的精神。