Skip to content

Commit ec7db2f

Browse files
committed
二刷155
1 parent 84dfa2c commit ec7db2f

File tree

6 files changed

+108
-5
lines changed

6 files changed

+108
-5
lines changed

docs/0000-23-monotonic-stack.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55

66
. xref:0042-trapping-rain-water.adoc[42. Trapping Rain Water]
77
. xref:0084-largest-rectangle-in-histogram.adoc[84. Largest Rectangle in Histogram]
8+
. xref:0155-min-stack.adoc[155. Min Stack] -- 这个辅助栈也可以认为是一种单调栈。
89
. xref:0239-sliding-window-maximum.adoc[239. Sliding Window Maximum]
910
. xref:0496-next-greater-element-i.adoc[496. Next Greater Element I]
1011
. xref:0503-next-greater-element-ii.adoc[503. Next Greater Element II]
1112
. xref:0654-maximum-binary-tree.adoc[654. Maximum Binary Tree]
1213

14+
1315
== 参考资料
1416

1517
. https://cloud.tencent.com/developer/article/1998273[单调栈详解及其LeetCode应用详解^]

docs/0155-min-stack.adoc

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,6 @@
33

44
https://leetcode.com/problems/min-stack/[LeetCode - Min Stack^]
55

6-
这道题解法还挺多。只使用一个栈的方案,还需要再思考思考。
7-
8-
TODO
9-
106
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
117

128

@@ -32,13 +28,39 @@ minStack.top(); --> Returns 0.
3228
minStack.getMin(); --> Returns -2.
3329
----
3430

35-
31+
== 思路分析
3632

33+
使用两个栈,一个栈存原始数据,另外一个栈存当前栈的最小值。
3734

35+
image::images/0155-01.gif[{image_attr}]
36+
37+
// TODO 这道题解法还挺多。只使用一个栈的方案,还需要再思考思考。
3838

3939
[[src-0155]]
40+
[tabs]
41+
====
42+
一刷::
43+
+
44+
--
4045
[{java_src_attr}]
4146
----
4247
include::{sourcedir}/_0155_MinStack.java[tag=answer]
4348
----
49+
--
50+
51+
二刷::
52+
+
53+
--
54+
[{java_src_attr}]
55+
----
56+
include::{sourcedir}/_0155_MinStack_2.java[tag=answer]
57+
----
58+
--
59+
====
60+
61+
== 参考资料
62+
63+
. https://leetcode.cn/problems/min-stack/solutions/242190/zui-xiao-zhan-by-leetcode-solution/[155. 最小栈 - 官方题解^]
64+
. https://leetcode.cn/problems/min-stack/solutions/13496/shi-yong-fu-zhu-zhan-tong-bu-he-bu-tong-bu-python-/[155. 最小栈 - 使用辅助栈(同步和不同步,Python 代码、Java 代码)^]
65+
4466

docs/images/0155-01.gif

10.7 MB
Loading

logbook/202406.adoc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,11 @@
337337
|{doc_base_url}/1644-lowest-common-ancestor-of-a-binary-tree-ii.adoc[题解]
338338
|树形DP套路,没有验证答案!
339339

340+
|{counter:codes}
341+
|{leetcode_base_url}/min-stack/[155. Min Stack]
342+
|{doc_base_url}/0155-min-stack.adoc[题解]
343+
|复习单调栈
344+
340345
|===
341346

342347
截止目前,本轮练习一共完成 {codes} 道题。

src/main/java/com/diguage/algo/leetcode/_0155_MinStack.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@
3232
* @since 2020-01-24 16:40
3333
*/
3434
class _0155_MinStack {
35+
// tag::answer[]
3536

3637
// Runtime: 8 ms, faster than 18.94% of Java online submissions for Min Stack.
3738
// Memory Usage: 46.2 MB, less than 5.08% of Java online submissions for Min Stack.
39+
// @author D瓜哥 · https://www.diguage.com
3840
private Stack<Integer> stack;
3941
private Stack<Integer> helper;
4042

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.diguage.algo.leetcode;
2+
3+
import java.util.Deque;
4+
import java.util.LinkedList;
5+
import java.util.Stack;
6+
7+
/**
8+
* = 155. Min Stack
9+
*
10+
* https://leetcode.com/problems/min-stack/[Min Stack - LeetCode]
11+
*
12+
* Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
13+
*
14+
* * push(x) -- Push element x onto stack.
15+
* * pop() -- Removes the element on top of the stack.
16+
* * top() -- Get the top element.
17+
* * getMin() -- Retrieve the minimum element in the stack.
18+
*
19+
*
20+
* .Example:
21+
* [source]
22+
* ----
23+
* MinStack minStack = new MinStack();
24+
* minStack.push(-2);
25+
* minStack.push(0);
26+
* minStack.push(-3);
27+
* minStack.getMin(); --> Returns -3.
28+
* minStack.pop();
29+
* minStack.top(); --> Returns 0.
30+
* minStack.getMin(); --> Returns -2.
31+
* ----
32+
*
33+
* @author D瓜哥 · https://www.diguage.com
34+
* @since 2020-01-24 16:40
35+
*/
36+
class _0155_MinStack_2 {
37+
// tag::answer[]
38+
private Deque<Integer> stack = new LinkedList<>();
39+
private Deque<Integer> minStack = new LinkedList<>();
40+
/**
41+
* @author D瓜哥 · https://www.diguage.com
42+
* @since 2024-07-31 16:09:25
43+
*/
44+
public void push(int x) {
45+
stack.push(x);
46+
if (minStack.isEmpty()) {
47+
minStack.push(x);
48+
} else {
49+
if (x < minStack.peek()) {
50+
minStack.push(x);
51+
} else {
52+
minStack.push(minStack.peek());
53+
}
54+
}
55+
}
56+
57+
public void pop() {
58+
stack.pop();
59+
minStack.pop();
60+
}
61+
62+
public int top() {
63+
return stack.peek();
64+
}
65+
66+
public int getMin() {
67+
return minStack.peek();
68+
}
69+
// end::answer[]
70+
}
71+
72+

0 commit comments

Comments
 (0)