LeetCode简单题之用栈操作构建数组
題目
給你一個目標數組 target 和一個整數 n。每次迭代,需要從 list = {1,2,3…, n} 中依序讀取一個數字。
請使用下述操作來構建目標數組 target :
Push:從 list 中讀取一個新元素, 并將其推入數組中。
Pop:刪除數組中的最后一個元素。
如果目標數組構建完成,就停止讀取更多元素。
題目數據保證目標數組嚴格遞增,并且只包含 1 到 n 之間的數字。
請返回構建目標數組所用的操作序列。
題目數據保證答案是唯一的。
示例 1:
輸入:target = [1,3], n = 3
輸出:[“Push”,“Push”,“Pop”,“Push”]
解釋:
讀取 1 并自動推入數組 -> [1]
讀取 2 并自動推入數組,然后刪除它 -> [1]
讀取 3 并自動推入數組 -> [1,3]
示例 2:
輸入:target = [1,2,3], n = 3
輸出:[“Push”,“Push”,“Push”]
示例 3:
輸入:target = [1,2], n = 4
輸出:[“Push”,“Push”]
解釋:只需要讀取前 2 個數字就可以停止。
示例 4:
輸入:target = [2,3,4], n = 4
輸出:[“Push”,“Pop”,“Push”,“Push”,“Push”]
提示:
1 <= target.length <= 100
1 <= target[i] <= 100
1 <= n <= 100
target 是嚴格遞增的
來源:力扣(LeetCode)
解題思路
??既然給定的target是嚴格遞增的,那么我們只需要從前往后遍歷生成的序列即可,當遇到的值不等于當前的target元素,則直接壓入棧然后再彈出,若是等于的話,只需要壓入棧。或者將序列改造成隊列,一直出隊對比即可。
class Solution:def buildArray(self, target: List[int], n: int) -> List[str]:operating=[]i=1j=0while i<n+1 and j<len(target):if i==target[j]:operating.append('Push')j+=1i+=1else:operating.extend(['Push','Pop'])i+=1return operating
class Solution:def buildArray(self, target: List[int], n: int) -> List[str]:operating=[]Q=deque(range(1,n+1))i=0while Q and i<len(target):temp=Q.popleft()if temp==target[i]:operating.append('Push')i+=1else:operating.extend(['Push','Pop'])return operating
總結
以上是生活随笔為你收集整理的LeetCode简单题之用栈操作构建数组的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode简单题之K 进制表示下的
- 下一篇: LeetCode简单题之两栋颜色不同且距