动漫网站开发优势,网址域名,钻探公司宣传册设计样本,wordpress图书介绍插件题目
设计一个支持 push #xff0c;pop #xff0c;top 操作#xff0c;并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。i…题目
设计一个支持 push pop top 操作并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int getMin() 获取堆栈中的最小元素。
示例 1:
输入
[MinStack,push,push,push,getMin,pop,top,getMin]
[[],[-2],[0],[-3],[],[],[],[]]输出
[null,null,null,null,-3,null,0,-2]解释
MinStack minStack new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); -- 返回 -3.
minStack.pop();
minStack.top(); -- 返回 0.
minStack.getMin(); -- 返回 -2.提示
-231 val 231 - 1pop、top 和 getMin 操作总是在 非空栈 上调用push, pop, top, and getMin最多被调用 3 * 104 次 自己的一些思考
我每次在看到这个题目的时候都会写一点思考有些时候思考不一定全都对很多时候都是一个暴力思考。但是思考的流程可能比较重要。有错误也请大家斧正不过最后的代码一定会是修改且通过用例的。
栈是一个LIFO结构后进先出。有三种基本的操作。1.PUSH即把一个元素压入栈顶push和append的效果都是一样的。可是push用在栈里面append常见于列表。2.pop即为去除栈顶上的元素3.Top/peek返回栈顶的元素
这个代码想要实现的就是写一个栈这个栈能够有基础的操作且能够返回最小值
class MinStack:def __init__(self):def push(self, val: int) - None:def pop(self) - None:def top(self) - int:def getMin(self) - int:# Your MinStack object will be instantiated and called as such:
# obj MinStack()
# obj.push(val)
# obj.pop()
# param_3 obj.top()
# param_4 obj.getMin()
题目给的参考例子是这个我们就拿这个来试着分析一下。 def __init__(self): def push(self, val: int) - None:
先初始化这个栈可以写成self.stack[],这个self指向调用的当前对象指向对象自身的引用能够初始化这个对象然后这里使用的是self.stack[],创建一个空栈 def push(self, val: int) - None:
这里在栈顶添加一个元素可以使用这个代码self.stack.push(val) def pop(self) - None:
这里返回最上面的这个也可以用stack里面的方法self.stack.pop def top(self) - int:
这里要获取topreturn self.stack[-1][0],最后面一个元素可能是一个列表返回这个列表的第一个值 def getMin(self) - int:
那么我到这里的时候就会有一点迷惑这个Min该怎么样去处理呢于是我去看了一下题解。 题解
题解当中提到使用一个叫做“辅助栈”的概念
而且这个题解在栈中间插入了元组里面有不同数据类型的一种数据结构可以存储一组有序的元素
什么是辅助栈辅助栈最经典的例子就是这个最小栈就是保存栈内所有元素的最小值。有新添加进来的元素都能够获取到这个的最小值当新元素来的时候如果它比辅助栈的栈顶元素更小就把这个新的元素压入辅助栈当元素出栈是如果它和辅助栈的栈顶元素大小一致时就把辅助栈的栈顶也给弹出POP
class MinStack(object):def __init__(self):initialize your data structure here.、初始化栈self.stack []def push(self, x)::type x: int:rtype: void#栈内每一个元素都是一个二元组tuple#(x)(x)前一个(x)是真实的元素后面一个(x)是最小#如果不是空值就把自身和现在栈顶的二元组的1做一个比较#哪个小新栈顶上面的[1]就是这个元素if not self.stack:self.stack.append((x, x))else:self.stack.append((x, min(x, self.stack[-1][1])))def pop(self)::rtype: voidself.stack.pop()def top(self)::rtype: intreturn self.stack[-1][0]def getMin(self)::rtype: intreturn self.stack[-1][1]# Your MinStack object will be instantiated and called as such:
# obj MinStack()
# obj.push(x)
# obj.pop()
# param_3 obj.top()
# param_4 obj.getMin() TODO
1.第一刷2024/3/10
2.切记辅助栈这个概念可以通过元组这种方法来实现