第 1 天
栈与队列(简单)
class CQueue:
def __init__(self):
self.queue = []
def appendTail(self, value: int) -> None:
self.queue.append(value)
def deleteHead(self) -> int:
if self.queue == []:
return -1
num = self.queue[0]
del(self.queue[0])
return num
刷题心得:
Python 中 del() 函数和 remove() 方法的区别
del删除的就是那个索引的元素。
而remove删除的是首次出现在列表中的元素。
我们可以在一下代码中看到一些他们的特点
>>> a=[1,2,3,5,4,2,6]
>>> a.remove(a[5])
>>> a
[1, 3, 5, 4, 2, 6]
因为remove传入的是值,所以它可以用变量指代如下
>>> a=[1,2,3,5,4,2,6]
>>> tem = a[1]
>>> a.remove(tem)
>>> a
[1, 3, 5, 4, 2, 6]
但是del传入的是索引所以传入变量不会有任何变化
>>> a=[1,2,3,5,4,2,6]
>>> tem = a[1]
>>> del(tem)
>>> a
[1, 2, 3, 5, 4, 2, 6]
正确应该如下
>>> a=[1,2,3,5,4,2,6]
>>> del(a[5])
>>> a
[1, 2, 3, 5, 4, 6]
同时又因为del是对索引进行操作,如果在循环中使用会导致索引的变化,可能会引起报错
思路 :
设置一个stack和一个辅助栈mini_stack。
使用push方法时,将两个栈均为空时,将value压入stack和mini_stack,当栈不为空时,将value压入stack,将value和mini_stack栈顶比较,若value<mini_stack[-1],将value压入mini_stack,此时mini_stack[-1]为stack最小值。
使用pop方法时,先将stack pop,判断若stack.pop() == mini_stack[-1],说明当前stack最小值要出栈,同时将mini_stack.pop()。
使用min方法时,返回mini_stack[-1]
class MinStack:
def __init__(self):
"""
initialize your data structure here.
"""
self.stack = []
self.mini_stack = []
def push(self, x: int) -> None:
self.stack.append(x)
if not self.mini_stack or x <= self.mini_stack[-1]:
self.mini_stack.append(x)
def pop(self) -> None:
if self.stack.pop() == self.mini_stack[-1] :
self.mini_stack.pop()
def top(self) -> int:
if self.stack:
return self.stack[-1]
else:
return None
def min(self) -> int:
return self.mini_stack[-1]
当然还有另一种思路,就是minStack辅助栈每次记住入栈stack的最小值,即:将数据分别入栈stack和minStack,当入栈minStack的时候,与栈顶元素比较大小,若小于栈顶元素,则入栈成为新的栈顶元素,若大于栈顶元素,则入栈原先的栈顶元素。
'''
假装有代码
'''