活用天秤模型: 尋找平衡軸心點_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

avatar-img
88會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
題目會給我們一個整數陣列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的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
相信方格子的讀者都有看過這一篇文章了 https://vocus.cc/article/670d1aecfd89780001a9da1d 方法你已經會了,接下來就是活用,靈活運用 這一次再來跟你們舉例一下,可以融會貫通 我們一樣用三竹的來示範,因為它免註冊
Thumbnail
探討如何藉由超常規法則來創造令人驚豔的成果。 透過掌握可控與不可控的成功因素,並隨時調整自己的行動與目標,學習如何將過去的經驗轉化為推進未來的動力。 面對失敗時的心態轉變,提倡學習交流的重要性,以突破平凡的界限。
Thumbnail
覆盤這個詞聽起來好像很專業,但其實它的意思很簡單,就是回過頭來檢討和整理自己做過的事,看看哪些地方可以改進、哪些部分做得不錯。這樣的過程可以幫助自己進步,不管是生活上還是工作中,覆盤都是非常重要。這裡提供過往自己簡單的覆盤經驗。
Thumbnail
這篇文章主要介紹了活用一輩子的筆記術,覆蓋了隨時記錄、覆盤、記錄生活感受、戒斷不好的習慣以及像子彈筆記一樣的整理等內容。文章重點強調記錄生活感受,並提到了使用手機記錄的方式,以及如何利用筆記法和覆盤來達到自我管理的效果。
Thumbnail
這題的題目在這裡:Find Pivot Index 題目敘述 題目會給我們一個整數陣列nums,要求我們計算平衡軸心點在哪? 平衡軸心的意思就是軸心點索引左側的元素總合 = 軸心點索引右側的元素總合
Thumbnail
目前需要檢視過去的現實,也就是物質上的人事物,根源原因可能是因為逃避、害怕改變,造成的結果是現在可能會對於經濟狀況、人際關係以及情感上的過度忽略,導致狀況有點緊張。囤積物品或者是囤積過去的記憶也是其中一種外在表現狀況,內心是因為缺乏安全感或是對自己沒有自信,也不相信身邊的人,也許其中有願意幫助你的人
Thumbnail
當情緒低落降臨時,生活似乎變得沉重而困難。這種情緒常常伴隨著悲傷、無力感和對未來的不確定感。但是,不要忘記,每個人都會經歷低落的時刻,這是生命中不可避免的一部分。重要的是,我們學會如何應對和走出情緒低谷。 首先,讓我們理解低落情緒的根源。它可能是由於生活中的壓力、失去親人、工作不順遂或其他困難情況
今天是一個充實而忙碌的一天,我葉瀚林對於工作和健身的平衡感又有了更深的體會。作為一家智慧家居公司的創辦人和CEO,我的工作時間往往不受拘束,需要面對各種挑戰和責任。然而,我也深知保持身心健康的重要性,所以將健身納入了我的日常生活中。 早上,我起床後就迫不及待地穿上運動裝,前往健身房。
Thumbnail
自然界的光、水、空氣…等元素,讓植物、動物得巳延續生命。 人類世界;探討的是心靈上的平衡。 一顆失衡的心,會讓自己情緒低落亦或是爆躁…等,無法心平氣和聆聽深沈的聲音,頓時失去依靠,沒有後援可以支持和幫助時,生命可能因此殞落…。 新聞報導著:「某醫學院休學一年,今年一月將復學的學生上吊身亡…」,只
Thumbnail
在這個繽紛多彩的人生旅途中,我們總是會經歷起伏不定的挑戰和失敗。然而,無論處於何種階段,遇到怎樣的挫折,我們都需要學會擁有「創新勇氣」這一重要概念。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
相信方格子的讀者都有看過這一篇文章了 https://vocus.cc/article/670d1aecfd89780001a9da1d 方法你已經會了,接下來就是活用,靈活運用 這一次再來跟你們舉例一下,可以融會貫通 我們一樣用三竹的來示範,因為它免註冊
Thumbnail
探討如何藉由超常規法則來創造令人驚豔的成果。 透過掌握可控與不可控的成功因素,並隨時調整自己的行動與目標,學習如何將過去的經驗轉化為推進未來的動力。 面對失敗時的心態轉變,提倡學習交流的重要性,以突破平凡的界限。
Thumbnail
覆盤這個詞聽起來好像很專業,但其實它的意思很簡單,就是回過頭來檢討和整理自己做過的事,看看哪些地方可以改進、哪些部分做得不錯。這樣的過程可以幫助自己進步,不管是生活上還是工作中,覆盤都是非常重要。這裡提供過往自己簡單的覆盤經驗。
Thumbnail
這篇文章主要介紹了活用一輩子的筆記術,覆蓋了隨時記錄、覆盤、記錄生活感受、戒斷不好的習慣以及像子彈筆記一樣的整理等內容。文章重點強調記錄生活感受,並提到了使用手機記錄的方式,以及如何利用筆記法和覆盤來達到自我管理的效果。
Thumbnail
這題的題目在這裡:Find Pivot Index 題目敘述 題目會給我們一個整數陣列nums,要求我們計算平衡軸心點在哪? 平衡軸心的意思就是軸心點索引左側的元素總合 = 軸心點索引右側的元素總合
Thumbnail
目前需要檢視過去的現實,也就是物質上的人事物,根源原因可能是因為逃避、害怕改變,造成的結果是現在可能會對於經濟狀況、人際關係以及情感上的過度忽略,導致狀況有點緊張。囤積物品或者是囤積過去的記憶也是其中一種外在表現狀況,內心是因為缺乏安全感或是對自己沒有自信,也不相信身邊的人,也許其中有願意幫助你的人
Thumbnail
當情緒低落降臨時,生活似乎變得沉重而困難。這種情緒常常伴隨著悲傷、無力感和對未來的不確定感。但是,不要忘記,每個人都會經歷低落的時刻,這是生命中不可避免的一部分。重要的是,我們學會如何應對和走出情緒低谷。 首先,讓我們理解低落情緒的根源。它可能是由於生活中的壓力、失去親人、工作不順遂或其他困難情況
今天是一個充實而忙碌的一天,我葉瀚林對於工作和健身的平衡感又有了更深的體會。作為一家智慧家居公司的創辦人和CEO,我的工作時間往往不受拘束,需要面對各種挑戰和責任。然而,我也深知保持身心健康的重要性,所以將健身納入了我的日常生活中。 早上,我起床後就迫不及待地穿上運動裝,前往健身房。
Thumbnail
自然界的光、水、空氣…等元素,讓植物、動物得巳延續生命。 人類世界;探討的是心靈上的平衡。 一顆失衡的心,會讓自己情緒低落亦或是爆躁…等,無法心平氣和聆聽深沈的聲音,頓時失去依靠,沒有後援可以支持和幫助時,生命可能因此殞落…。 新聞報導著:「某醫學院休學一年,今年一月將復學的學生上吊身亡…」,只
Thumbnail
在這個繽紛多彩的人生旅途中,我們總是會經歷起伏不定的挑戰和失敗。然而,無論處於何種階段,遇到怎樣的挫折,我們都需要學會擁有「創新勇氣」這一重要概念。