| 栈排序
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。
最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。
该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。
示例1:
输入:
["SortedStack", "push", "push", "peek", "pop", "peek"]
[[], [1], [2], [], [], []]
输出:
[null,null,null,1,null,2]
示例2:
输入:
["SortedStack", "pop", "pop", "push", "pop", "isEmpty"]
[[], [], [], [1], [], []]
输出:
[null,null,null,null,null,true]
| 题解
class SortedStack:
"""
解题思路:
题目要求只能使用一个临时栈存放数据
添加一个临时栈,在push的时候进行从大到小排序
入栈时,先将栈中大于val的数值暂存到临时栈中
将val入栈
再将临时栈中的数据push会栈中
"""
def __init__(self):
self.stack = list()
self.tem_stack = list()
def push(self, val: int) -> None:
if not self.stack:
self.stack.append(val)
else:
while self.stack and val > self.stack[-1]:
self.tem_stack.append(self.stack.pop())
self.stack.append(val)
while self.tem_stack:
self.stack.append(self.tem_stack.pop())
def pop(self) -> None:
if self.stack:
return self.stack.pop()
def peek(self) -> int:
if self.stack:
return self.stack[-1]
else:
return -1
def isEmpty(self) -> bool:
return False if self.stack else True