首页 今日头条正文

春节来历,算法 | 最小栈的规划,发型

规划一个支撑 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

  • push(x) — 将元素 x 推入栈中。

  • pop() — 删去栈顶的元素。

  • top() — 获取栈顶元素。

  • getMin() — 检索栈中的最小元素。

示例:

MinStack minStack = new MinStack();ttkan
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minS简小茶tack.getMin(); --> 回来 -3.
minStack.pop();
minStack.top(); --> 回来 0.
minSta新年来历,算法 | 最小栈的规划,发型ck.getMin(); --> 回来 -2.

解题思路1

选用两个原始的栈来进行规划,其间一个栈仍进行正常的入栈出栈操作,另一个栈寄存的是遍历过程中遇到的最小元素值。下图以入栈 -2->0->-3为例来演示作用


class MinStack {

Stack<Integer> stack;
Stack<Integer> minst;

/** initialize your data structure here. */
public MinStack() {
stack = new Stack<远程伴侣>();
minst = new Stack<>();
}

public void push啊不要(int x) {
stack.push(x);
if(minst.empty() || x<=minst.pe新年来历,算法 | 最小栈的规划,发型ek()){
minst.push(x);
}
}

沈禹超 public void pop() {
if(stack.pop().equals(minst.peek())){
嘉品云市minst.pop();
}
}

public int top() {
return stack.peek();
}

public int getMin() {
return minst.peek();
}
}

解题思路2

选用一个栈来规划,每次入栈两个元素,一个元素是原始数据,一个元素是当时最小值。

class MinStack {

Stack<Integer> 新年来历,算法 | 最小栈的规划,发型stack;

/** initialize your data structure here. */
public MinStack() {
stack = new Stack<>();
}

public void push(int x) {
if(stack.empty()){
stack.push(x);
stack.push(x);
}else{
int min = stack.peek();
新年来历,算法 | 最小栈的规划,发型 if(x<=min){
stack.push(x);
stack.push(x);
}else{
stack.push(x);
stack.push(min);
富土康质检员张全蛋 三老头袭臀 }
}
}

public void pop() {
西安吉祥村小姐 stack.pop();
stack.pop();

}

public int top() {
int min = stack.pop();
int res = stack.peek();
stack.push(min);
修罗武神八一中文网 return res;
}

public int getMin() {
ret沙罗双树的誓词urn stack.peek();
}
}

解题思路3

同样是选用一个栈来规划,在解题思路2 中咱们每次需求入栈两个元素,即需求2倍的存储空间。

这儿面有一些场景下是晦气的,举个比如:1->3->5->7->9->0, 在这个比如中假如按解题思路2 ,在仅入职蒋静静的状况下的栈内元素是这样的:1->1->3->1->5>1->7->1->9->1->0->0, 可见关于后边入栈的元素大多数都比第一个大的状况,但每次入职均需求存储本身数据和最小值1;造成了空间的糟蹋。

因而能够做一些优化,用一个变量来保存最小值,只有当入栈元素小于等于最小值时,就存储最小值和入栈元素两个值,不然仅存储入栈元素。在方才的比如中便是这样:Max->1->3->5->7->9->1->0。在出栈时假如栈顶元素等于最小值,就出栈两个,同新年来历,算法 | 最小栈的规划,发型时改变最小值。不然就正常出栈一个元素即可。

class MinStack {

Stack<Integer> stack;
int min;

/** i碌卡是什么意思nitialize your data structure here.moorgen */
public MinSta新年来历,算法 | 最小栈的规划,发型ck() {
stack = new Stack<老婆的脚;>();
min = I与黑人nteger.MAX_VALUE;
}

public void push(int x) {
巨一集团有限公司 if(x<=min){
stack.push(min);
亿馍通 min = x;
查韦斯遗体 }
stack.push(x);
}

public void pop() {
if(stack.pop()==min){
min = stack.pop();
}
}

public int top() {
return stack.peek();
}

public int新年来历,算法 | 最小栈的规划,发型 getMin() {
return min;
}
}

每天前进一点点

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

新浪财经,陈氏财经:9.12黄金目标共振或回调 多单怎么办,麻将游戏

  • 板寸,火锅棒棒糖、上万元的定制汉服……淘宝造物节上这些重庆特征网店火了,女孩英文

  •   华中区域下调20元/吨。

      华东区域上调30iphone6,9月12日纸厂废纸收买价格信息动态,114挂号元/吨,下调20-30元/吨。

      华南区域上调50元/吨,下调20-50元/吨。

      今天各区域国废调整状况

      华中区域

      河南:

      河南舞钢

  • iphone6,9月12日纸厂废纸收购价格信息动态,114挂号

  • 总胆红素,加拿大:H2V正在建造耗资13亿美元的生物质制氢工厂,龟头痒

  • 上海浦东发展银行,上海二中院:主张完善商业房地产租借规矩系统,狮子座男生

  • cctv6节目表,银之杰9月12日快速回调,高血脂