用stack 模擬陣列生成 Build Array w/ Stack Operations_Leetcode 1441

更新於 2024/11/02閱讀時間約 6 分鐘
raw-image

這題的題目在這裡:

題目敘述

題目會給我們一個陣列target,問我們從整數串流中1~n之中,如何透過stack 的 push和pop來模擬生成target指定的形式?


測試範例

Example 1:

Input: target = [1,3], n = 3
Output: ["Push","Push","Pop","Push"]
Explanation: Initially the stack s is empty. The last element is the top of the stack.
Read 1 from the stream and push it to the stack. s = [1].
Read 2 from the stream and push it to the stack. s = [1,2].
Pop the integer on the top of the stack. s = [1].
Read 3 from the stream and push it to the stack. s = [1,3].

Example 2:

Input: target = [1,2,3], n = 3
Output: ["Push","Push","Push"]
Explanation: Initially the stack s is empty. The last element is the top of the stack.
Read 1 from the stream and push it to the stack. s = [1].
Read 2 from the stream and push it to the stack. s = [1,2].
Read 3 from the stream and push it to the stack. s = [1,2,3].

Example 3:

Input: target = [1,2], n = 4
Output: ["Push","Push"]
Explanation: Initially the stack s is empty. The last element is the top of the stack.
Read 1 from the stream and push it to the stack. s = [1].
Read 2 from the stream and push it to the stack. s = [1,2].
Since the stack (from the bottom to the top) is equal to target, we stop the stack operations.
The answers that read integer 3 from the stream are not accepted.



約束條件

Constraints:

  • 1 <= target.length <= 100
  • 1 <= n <= 100
  • 1 <= target[i] <= n
  • target is strictly increasing.

演算法

建造一個迴圈,每次迭代讀入一個整數,並且push到stack頂端

假如這次迭代當下的整數是需要的,就留下來,並且更新target index

假如這次迭代當下的整數是不需要的,就pop出去,進行下一次迭代。


最後,當target index已經走到最後一個位置,到表已經模擬生成出整個target陣列。

中間stack操作所記錄的"Push", "Pop"字串就是最終答案。


程式碼

class Solution:
 def buildArray(self, target: List[int], n: int) -> List[str]:
  
  target_idx, cur_read_num = 0, 1
  
  stack_operation = []
  
  while target_idx < len(target):
   
   # Push current read number
   stack_operation.append('Push')
   
   if target[target_idx] == cur_read_num:
    # Current read number is what we need, keep it and update target index
    target_idx += 1
   
   else:
    # Pop out unnecessary element
    stack_operation.append('Pop')
    
   # current read number always +1 after each iteration
   cur_read_num += 1
   
  return stack_operation

複雜度分析

時間複雜度: O( n)
從整數流中模擬target array建造,最長迭代次數和n一樣長。

空間複雜度: O(n)
從整數流中模擬target array建造,target array最長和n的大小一樣長。


關鍵知識點

熟悉stack push 和 pop的操作,結合1~n的整數流,進行陣列生成模擬。


Reference:

[1] Python O(t) sol by simulation [w/ Comment] - Build an Array With Stack Operations - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
題目會給定一個字串s,裡面都是由()*打散交錯而成。 配對規則 左括弧 ( 可以和 右括弧 ) 配對,其中 左括弧一定要在右括弧的左邊。 左括弧 ( 也可以和 *星號 配對,其中 左括弧一定要在*星號的左邊。 問我們給定的輸入字串s是否為合法括弧配對字串?
題目會給我們一個輸入陣列,陣列裡面存放的是每個元素做XOR之後的前綴累積值。 要求我們從累積值還原出原本的陣列元素值。 XOR前綴累積值定義: pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i]
題目會給定一組規則,要求我們計算給定長度下的母音直線排列有幾種?
題目會給定一個存有整數的陣列,要求我們依照下列規則進行排序,由小排到大,升序排列。
題目會給定一個帶有Random Pointer的鏈結串列,要求我們實體複製deep copy這條鏈結串列,並且輸出副本的根結點。
題目會給一顆二元樹,要求我們計算節點值 和 子樹平均值相等的node有幾個。
題目會給定一個字串s,裡面都是由()*打散交錯而成。 配對規則 左括弧 ( 可以和 右括弧 ) 配對,其中 左括弧一定要在右括弧的左邊。 左括弧 ( 也可以和 *星號 配對,其中 左括弧一定要在*星號的左邊。 問我們給定的輸入字串s是否為合法括弧配對字串?
題目會給我們一個輸入陣列,陣列裡面存放的是每個元素做XOR之後的前綴累積值。 要求我們從累積值還原出原本的陣列元素值。 XOR前綴累積值定義: pref[i] = arr[0] ^ arr[1] ^ ... ^ arr[i]
題目會給定一組規則,要求我們計算給定長度下的母音直線排列有幾種?
題目會給定一個存有整數的陣列,要求我們依照下列規則進行排序,由小排到大,升序排列。
題目會給定一個帶有Random Pointer的鏈結串列,要求我們實體複製deep copy這條鏈結串列,並且輸出副本的根結點。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
本文分享了作者第一次使用ibon繳信用卡款的經驗,簡單介紹了操作步驟以及遇到的問題與解決方法。透過ibon,作者發現繳款過程實際上非常簡單與方便,全新的方式讓作者免去了到銀行排隊的麻煩,未來的信用卡繳款將更加輕鬆。文章也指出了不同超商對紙本帳單的限制,並提供了小技巧以便讀者能夠順利繳款。
Thumbnail
在之前的教學中,已經學會了用雙向鏈結串列來實作Stack 堆疊。 今天,要用另一種底層資列結構,python list,來實作Stack 堆疊。 讀者可以從中發現,因為python list的功能和function實作已經很豐富, 所以使用起來,相當直覺,也簡單許多。
Thumbnail
在之前的教學中,已經學會了Node和Linked List的實作, 用Python實現了單向鏈結串列Singly linked list、雙向鏈結串列Doubly linked list。 今天要承接之前打下的基礎,用雙向鏈結串列來實作Stack 堆疊。
Thumbnail
這篇文章,會帶著大家複習以前學過的配對模型與Stack框架, 並且以括弧配對的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 首先,Stack本身具有Last-In First-Out 後進先出的特質。 再根據題目所需要的資訊利用Stack去儲存索引
Thumbnail
日常工作中是否也遇到 Slack 訊息如雪片般不間斷地飛來?現在只要在 Slack 中儲存一則訊息,AI 則會自動化摘要內容、提供執行建議,並將其新增至 Trello 待辦任務卡片。除了能快速彙整在討論串中收到的需求外,也很好輕鬆地統一管理所有工作中的待辦事項、優先排序,再多訊息也不怕遺漏!
Thumbnail
溫系宜蘭饒舌仔STACO也做了這樣的嘗試,在今年2月22日發行迎接兔年的新歌〈兔PT. TWO〉。他分享到,自己去年初就做了一首歌〈寅 TIGER YEAR〉,所以今年也想用歌曲來迎春......
Thumbnail
溫系宜蘭饒舌仔 STACO創作題材多從家鄉出發,作為以宜蘭當創作題材的饒舌歌手,他擅長描述遊子思鄉情懷,用道地宜蘭腔唱出豐厚的在地味。在〈雨市〉和〈東北季風〉兩首單曲先行釋出後,STACO的新專輯《蘭城話》於2022年3月22日正式發行。
Thumbnail
2017年的秋天我負責公司校園招募的專案,實地的到了幾個優秀的大學做應屆畢業生的宣講跟面試。面試過程中,我們一定會問一個問題:「你這一生最大的挫折是什麼?你當時怎麼克服?」
Thumbnail
亞馬遜 Amazon 與 Slack 達成策略合作,明顯的就是要來挑戰微軟。在 AWS 與 Azure 雲端大戰正打得你死我活之際,亞馬遜選擇在微軟的後院來放一把新的火。究竟科技巨人之間的戰火,會不會燒得更兇呢?
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
本文分享了作者第一次使用ibon繳信用卡款的經驗,簡單介紹了操作步驟以及遇到的問題與解決方法。透過ibon,作者發現繳款過程實際上非常簡單與方便,全新的方式讓作者免去了到銀行排隊的麻煩,未來的信用卡繳款將更加輕鬆。文章也指出了不同超商對紙本帳單的限制,並提供了小技巧以便讀者能夠順利繳款。
Thumbnail
在之前的教學中,已經學會了用雙向鏈結串列來實作Stack 堆疊。 今天,要用另一種底層資列結構,python list,來實作Stack 堆疊。 讀者可以從中發現,因為python list的功能和function實作已經很豐富, 所以使用起來,相當直覺,也簡單許多。
Thumbnail
在之前的教學中,已經學會了Node和Linked List的實作, 用Python實現了單向鏈結串列Singly linked list、雙向鏈結串列Doubly linked list。 今天要承接之前打下的基礎,用雙向鏈結串列來實作Stack 堆疊。
Thumbnail
這篇文章,會帶著大家複習以前學過的配對模型與Stack框架, 並且以括弧配對的應用題與概念為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 首先,Stack本身具有Last-In First-Out 後進先出的特質。 再根據題目所需要的資訊利用Stack去儲存索引
Thumbnail
日常工作中是否也遇到 Slack 訊息如雪片般不間斷地飛來?現在只要在 Slack 中儲存一則訊息,AI 則會自動化摘要內容、提供執行建議,並將其新增至 Trello 待辦任務卡片。除了能快速彙整在討論串中收到的需求外,也很好輕鬆地統一管理所有工作中的待辦事項、優先排序,再多訊息也不怕遺漏!
Thumbnail
溫系宜蘭饒舌仔STACO也做了這樣的嘗試,在今年2月22日發行迎接兔年的新歌〈兔PT. TWO〉。他分享到,自己去年初就做了一首歌〈寅 TIGER YEAR〉,所以今年也想用歌曲來迎春......
Thumbnail
溫系宜蘭饒舌仔 STACO創作題材多從家鄉出發,作為以宜蘭當創作題材的饒舌歌手,他擅長描述遊子思鄉情懷,用道地宜蘭腔唱出豐厚的在地味。在〈雨市〉和〈東北季風〉兩首單曲先行釋出後,STACO的新專輯《蘭城話》於2022年3月22日正式發行。
Thumbnail
2017年的秋天我負責公司校園招募的專案,實地的到了幾個優秀的大學做應屆畢業生的宣講跟面試。面試過程中,我們一定會問一個問題:「你這一生最大的挫折是什麼?你當時怎麼克服?」
Thumbnail
亞馬遜 Amazon 與 Slack 達成策略合作,明顯的就是要來挑戰微軟。在 AWS 與 Azure 雲端大戰正打得你死我活之際,亞馬遜選擇在微軟的後院來放一把新的火。究竟科技巨人之間的戰火,會不會燒得更兇呢?