题目:
设计一个支持 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.
代码:
/**
* @作者:dhc
* @创建时间:9:23 2018/8/4
* @描述:155.最小栈
*/
public class OneHundredAndFiftyFive {
//直接用ArrayList好像好一点
private int maxSize = 100;
private int add = 10;
private int[] nums;
private int index = 0;
public OneHundredAndFiftyFive() {
nums = new int[maxSize];
}
public void push(int x) {
if(index < maxSize){
nums[index++] = x;
}else{
int[] tem = new int[maxSize+add];
for (int i = 0; i < maxSize; i++) {
tem[i] = nums[i];
}
nums = tem;
maxSize = maxSize + add;
nums[index++] = x;
}
}
public void pop() {
if(index > 0)
index--;
}
public int top() {
if (index > 0) {
int t = index - 1;
return nums[t];
}
return 0;
}
public int getMin() {
if(index == 0){
return 0;
}
int min = nums[0];
for (int i = 1; i < index; i++) {
if(nums[i] < min){
min = nums[i];
}
}
return min;
}
public static void main(String[] args) {
OneHundredAndFiftyFive tt = new OneHundredAndFiftyFive();
System.out.println(tt.getMin());
tt.push(-2);
tt.push(0);
tt.push(-3);
System.out.println(tt.getMin());
tt.pop();
System.out.println(tt.top());
System.out.println(tt.getMin());
}
}