来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack
题目
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
定义一个数组,和一个minNum放最小值。
或者定义一个栈。用两个栈来处理。
方法1-定义最小值
class MinStack {
/** initialize your data structure here. */
var stackArr:[Int] = [Int]()
var minNum:Int = Int()
init() {
}
func push(_ x: Int) {
stackArr.append(x)
if stackArr.count == 1 {
minNum = x
}else {
minNum = (minNum > x) ? x :minNum
}
}
func pop() {
if stackArr.count > 0 {
if minNum == stackArr.last {
let arr = stackArr.sorted()
if arr.count > 1 {
minNum = arr[1]
}else {
minNum = 0
}
}
stackArr.removeLast()
}
}
func top() -> Int {
if stackArr.count > 0 {
return stackArr.last!
}
return 0
}
func getMin() -> Int {
if stackArr.count > 0 {
return minNum
}
return 0
}
}
方法2-两个栈
struct StackInt {
var stackArr = [Int]()
var count: Int {
return stackArr.count
}
mutating func push(_ x: Int) -> Void {
stackArr.append(x)
}
mutating func pop() -> Int? {
return stackArr.popLast()
}
func top() -> Int? {
return stackArr.last
}
}
class MinStack {
/** initialize your data structure here. */
var stack = StackInt()
var minStack = StackInt()
init() {
}
func push(_ x: Int) {
stack.push(x)
if (minStack.top() == nil) {
minStack.push(x)
}else if(minStack.top()! >= x) {
minStack.push(x)
}
}
func pop() {
let stackLast = stack.pop()
if stackLast == minStack.top() {
minStack.pop()
}
}
func top() -> Int {
return stack.top() ?? 0
}
func getMin() -> Int {
return minStack.top() ?? 0
}
}
最后
欢迎留言区出现更好的方法~~哈哈
网友评论