剑指offer JZ-20
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
思路:
比较水的题目。
一般而言找到栈内最小值,需要遍历栈,此时时间复杂度为O(n)
为了达到O(1)的时间复杂度,我们可以采用空间换时间的策略:
额外维护一个栈min_list,当push进新元素时比较新元素和min_list栈顶元素的大小,将较小的值压入min_list
这样,min_list的栈顶总会记录着当前栈内的最小值
class Solution { public: stack<int> list; stack<int> min_list; void push(int value) { if(list.size()==0) { min_list.push(value); list.push(value); return; } int temp = list.top(); if(temp > value) min_list.push(value); else min_list.push(temp); list.push(value); } void pop() { list.pop(); min_list.pop(); } int top() { return list.top(); } int min() { return min_list.top(); } };