理論引述
棧Stack:先進後出的線性表
隊列Queue:先進先出的線性表
python中heapq堆的講解
a = [1,2,3,4,5]
print(a.pop()) # 結果爲5,說明彈出的是數組中的最後一個元素
習題目錄
[1]. 快樂的LeetCode — 225. 用隊列實現棧的三種解法
[2]. 快樂的LeetCode — 面試題09. 用兩個棧實現隊列
[3]. 快樂的Leetcode — 155. 最小棧 (面試題30. 包含min函數的棧)
[4]. 快樂的LeetCode — 面試題31. 棧的壓入、彈出序列
[5]. 快樂的LeetCode — 215. 數組中的第K個最大元素
1.使用隊列實現棧時,可以轉化思路爲數組順序的變換
圖解表述:
代碼表述:
class MyStack:
def __init__(self):
self.queue = []
def push(self, x):
self.queue.append(x)
length = len(self.queue)
for i in range(length-1):
first = self.queue[0]
del self.queue[0]
self.queue.append(first)
def pop(self):
target = self.queue[0]
del self.queue[0]
return target
def top(self):
return self.queue[0]
def empty(self):
return len(self.queue) == 0
2.使用棧實現隊列
- push(x) – 將一個元素放入隊列的尾部。
- pop() – 從隊列首部移除元素。
- peek() – 返回隊列首部的元素。
- empty() – 返回隊列是否爲空。
代碼表述:
class MyQueue(object):
def __init__(self):
self.quene = []
def push(self, x):
self.quene.append(x)
def pop(self):
target = self.quene[0]
del self.quene[0]
return target
def peek(self):
return self.quene[0]
def empty(self):
return len(self.quene) == 0
3.包含min函數的棧
快樂的Leetcode — 155. 最小棧 (面試題30. 包含min函數的棧)
4.面試題31. 棧的壓入、彈出序列
關鍵點:每次入棧後,循環判斷 “棧頂元素 == 彈出序列的當前元素” 是否成立,將符合彈出序列順序的棧頂元素全部彈出。
class Solution(object):
def validateStackSequences(self, pushed, popped):
stack, i = [], 0
for num in pushed:
stack.append(num)
while stack and stack[-1] == popped[i]:
stack.pop()
i += 1
return not stack
5.數組中的第K個最大元素