155. 最小栈

题目链接:https://leetcode-cn.com/problems/min-stack/

执行用时:72 ms, 在所有 Swift 提交中击败了88.82% 的用户
内存消耗:14.9 MB, 在所有 Swift 提交中击败了60.25% 的用户

一个栈实现

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class MinStack {
var stack = [Int]()
var point: Int
var minNum: Int
init() {
stack = []
point = -1
minNum = Int.max
}

func push(_ val: Int) {
point += 1
stack.append(val)
if val <= minNum {
minNum = val
}
}

func pop() {
if point >= 0 {
let num = stack.removeLast()
point -= 1
if num == minNum {
minNum = Int.max
for i in stride(from: point, through: 0, by: -1) {
minNum = min(stack[i], minNum)
}
}
}
}

func top() -> Int {
if point > -1 {
return stack[point]
}
return -1
}

func getMin() -> Int {
if point > -1 {
return minNum
}
return -1
}
}

执行用时:76 ms, 在所有 Swift 提交中击败了57.14% 的用户
内存消耗:15 MB, 在所有 Swift 提交中击败了41.62% 的用户

两个栈,参考题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class MinStack {
var data = [Int]()
var help = [Int]()
init() {
data = []
help = []
}

func push(_ val: Int) {
data.append(val)
var tail = 0
if help.last != nil {
tail = help.last!
}
if help.isEmpty || tail >= val {
help.append(val)
} else {
help.append(tail)
}

}

func pop() {
data.removeLast()
help.removeLast()
}

func top() -> Int {
if let lastone = data.last {
return lastone
}
return -1
}

func getMin() -> Int {
if let minNum = help.last {
return minNum
}
return -1
}

}

155. 最小栈
https://pisces34.github.io/2021/10/03/leetcode/155/
发布于
2021年10月3日
许可协议