微软面试100题-天天做-第二题
2014-03-25 20:12
295 查看
2.设计包含min函数的栈(栈)
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。
要求函数min、push以及pop的时间复杂度都是O(1)。
package com.microsoft; class Stack { private int size; private int top=-1; private int [] data; public Stack(int size){ this.size=size; data=new int[size]; } public void push(int value)throws Exception{ if(top==size){ throw new Exception("stack is full"); } top++; data[top]=value; } public int pop()throws Exception{ if(top<0){ throw new Exception("stack is empty"); } int ret=data[top]; top--; return ret; } public int getTop(){ return top; } public int getTopValue(){ return data[top]; } } public class MinStack{ private Stack dataStack; private Stack minStack; public MinStack(int size){ dataStack=new Stack(size); minStack=new Stack(size); } public void push(int value)throws Exception{ if(minStack.getTop()==-1||minStack.getTopValue()>=value){ minStack.push(value); } dataStack.push(value); } public int pop()throws Exception{ int ret=dataStack.pop(); if(ret==minStack.getTopValue()){ minStack.pop(); } return ret; } public int min(){ return minStack.getTopValue(); } public static void main(String[]args)throws Exception{ MinStack stack=new MinStack(10); stack.push(5); System.out.println("min:"+stack.min()); stack.push(8); stack.push(5); stack.push(4); stack.push(9); System.out.println("min:"+stack.min()); stack.pop(); System.out.println("min:"+stack.min()); stack.pop(); System.out.println("min:"+stack.min()); stack.pop(); System.out.println("min:"+stack.min()); } }
相关文章推荐
- 《程序员面试宝典-第四版》之递归学习
- 黑马程序员--泛型
- 【leetcode】面试leetcode代码
- 黑马程序员--集合框架
- 微软面试100题-天天做-第一题
- 黑马程序员--多线程2
- [初入职场] 不成文的期望
- 【云图】如何创建云图(云存储)
- hw面试题
- 华为14实习面试题
- 如果托瓦兹接受了乔布斯的职业建议会怎样?
- 野指针/查内存泄露 科大讯飞面试题-2013
- 黑马程序员_OC中的点语法
- 一个经典编程面试题的“隐退”
- 黑马程序员----集合框架
- PHP程序员的C学习之路3 - 第二章, const关键字和常量
- java面试题及答案(基础题122道,代码题19道)
- 黑马程序员--------------银行业务调度系统
- IT主管面试内容
- 老程序员学C# ------操作DataGridView控件详解