LeetCode
题目: 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
- push(x) -- 将元素 x 推入栈中。
- pop() -- 删除栈顶的元素。
- top() -- 获取栈顶元素。
- getMin() -- 检索栈中的最小元素。
示例:
打乱一个没有重复元素的数组。
示例:
代码语言:javascript复制MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
方案1:
用数组存数据,top就是最后存的,最小值排序后返回最小的
代码1:
不写了哈、、、运行时间太长、、、没过
方案二:
在方案一的基础上,用一个数组存最小值,pop的时候看是不是最小值,是的最小值数组也pop一个
代码二:
代码语言:javascript复制class MinStack {
var stackTop: Int?
var stack: [Int]
var stackMin: [Int]
/** initialize your data structure here. */
init() {
stack = [Int]()
stackTop = nil
stackMin = [Int]()
}
func push(_ x: Int) {
stackTop = x
stack.append(x)
if stackMin.isEmpty {
stackMin.append(x)
} else if x <= stackMin.last! {
stackMin.append(x)
}
}
func pop() {
let top = stack.removeLast()
if top == stackMin.last! {
stackMin.removeLast()
}
stackTop = stack.last
}
func top() -> Int {
return stackTop!
}
func getMin() -> Int {
return stackMin.last!
}
}
/**
* Your MinStack object will be instantiated and called as such:
* let obj = MinStack()
* obj.push(x)
* obj.pop()
* let ret_3: Int = obj.top()
* let ret_4: Int = obj.getMin()
*/
初级这一章节做完了,个人感觉就是路还长,继续努力
路还长