`

java-2.设计包含min函数的栈

阅读更多
具体思路参见:http://zhedahht.blog.163.com/blog/static/25411174200712895228171/
import java.util.ArrayList;
import java.util.List;


public class MinStack {

	//maybe we can use origin array rather than ArrayList
	private List<Integer> dataStack;
	private List<Integer> auxStack;//store the position of MinElement
	
	public static void main(String[] args) {
		MinStack minStack=new MinStack();
		minStack.push(3);
		minStack.printStatus();
		minStack.push(4);
		minStack.printStatus();
		minStack.push(2);
		minStack.printStatus();
		minStack.push(1);
		minStack.printStatus();
		minStack.pop();
		minStack.printStatus();
		minStack.pop();
		minStack.printStatus();
		minStack.push(0);
		minStack.printStatus();
	}

	public MinStack(){
		dataStack=new ArrayList<Integer>();
		auxStack=new ArrayList<Integer>();
	}
	public void push(int item){
		if(isEmpty()){
			dataStack.add(item);
			auxStack.add(0);//position=0
		}else{
			dataStack.add(item);
			int minIndex=auxStack.get(auxStack.size()-1);
			int min=dataStack.get(minIndex);
			if(min>item){
				auxStack.add(dataStack.size()-1);
			}else{
				auxStack.add(minIndex);
			}
		}
	}
	public int pop(){
		int top=-1;
		if(isEmpty()){
			System.out.println("no element,no pop");
		}else{
			auxStack.remove(auxStack.size()-1);
			top=dataStack.remove(dataStack.size()-1);
		}
		return top;
		
	}
	public int min(){
		int min=-1;
		if(!isEmpty()){
			int minIndex=auxStack.get(auxStack.size()-1);
			min=dataStack.get(minIndex);
		}
		return min;
	}
	public boolean isEmpty(){
		return dataStack.size()==0;
	}
	public void printStatus(){
		System.out.println("数据栈             辅助栈                最小值");
		for(int i=0;i<dataStack.size();i++){
			System.out.print(dataStack.get(i)+",");
		}
		System.out.print("          ");
		for(int i=0;i<dataStack.size();i++){
			System.out.print(auxStack.get(i)+",");
		}
		System.out.print("           ");
		System.out.print(this.min());
		System.out.println();
	}
	/*
步骤              数据栈            辅助栈                最小值
1.push 3    3          0             3
2.push 4    3,4        0,0           3
3.push 2    3,4,2      0,0,2         2
4.push 1    3,4,2,1    0,0,2,3       1
5.pop       3,4,2      0,0,2         2
6.pop       3,4        0,0           3
7.push 0    3,4,0      0,0,2         0
	 */
}
0
0
分享到:
评论

相关推荐

    剑指offer算法实现java版——面试题21包含min函数的栈

    实现一个栈,要求使用O(1)时间获取栈中最小值,O(1)执行pop、push操作。

    ShaunSheep#cs-wiki#30. 包含 min 函数的栈1

    30. 包含 min 函数的栈题目链接牛客网题目描述实现一个包含 min() 函数的栈,该方法返回当前栈中最小的值。在对栈进行 push 入栈和 pop 出栈操

    小米2019秋招前端开发笔试题(2).docx

    ### 小米2019秋招前端开发笔试题知识点解析 #### 1. JavaScript 变量作用域与提升 **题目**: 下列代码输出结果正确的是:(c) ... 视口宽度(如min-width, max-width等)是常用的媒体查询条件之一。

    java基础面试题包含min函数的栈

    java基础面试题包含min函数的栈本资源系百度网盘分享地址

    2021年最新Java面试宝典初稿答案-1118.docx

    2. **聚合函数(必会)**:例如COUNT(), SUM(), AVG(), MAX(), MIN()等,用于对一组数据进行计算并返回单一值,如求总和、平均值、最大值或最小值。 3. **SQL关键字(必会)**:如SELECT, FROM, WHERE, GROUP BY, ...

    algorithm-essentials-java

    根据提供的文件信息,“algorithm-essentials-java”似乎是一份关于Java编程语言中算法实现的文档。下面将基于文档中提到的各个部分来详细介绍其中涉及的关键知识点。 ### 引言 在计算机科学领域,算法是解决问题...

    wyh317#JZoffer#面试题30:包含min函数的栈1

    面试题30:包含min函数的栈题目定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。方法准备一个辅助栈,每次都把最小的元素(之前的最小元素

    Java面试 Java超级经典100问题 Java高级开发工程师必备 Java面试宝典

    包含min函数的栈.22.判断一个栈是否是另一个栈的弹出序列23.层序遍历二叉树。24.后序遍历二叉搜索树。25.二叉树中和为某值的路径.26.复杂链表的复制27.二叉搜索树转换为双向链表.28.打印字符串中所有字符的排列29....

    struts-2.3.31-min-lib

    此压缩包"struts-2.3.31-min-lib"显然是Struts 2的一个轻量级版本,包含了该框架的核心库文件。版本号2.3.31表明这是在2017年发布的一个稳定版,它修复了之前版本中的一些已知问题,并可能引入了一些新功能或性能...

    Java开发技术大全(500个源代码).

    narrowingConversion_2.java 缩减转换引发错误示例2 notMultipleOfThree.java 把100-200之间不能被3整除的数输出 outputByDoWhile.java 用while循环随机输出数据 outputByWhile.java 用do~while循环随机输出数据...

    剑指offer 计划1(栈与队列)---java(csdn)————程序.pdf

    【栈与队列的基本概念】 在计算机科学中,栈(Stack)和队列...包含min函数的栈则通过维护一个额外的栈来快速获取最小值,降低了查找最小值的时间复杂度。这些基础数据结构和算法的理解对于提升编程能力至关重要。

    1_1_Java-面试宝典1(1).docx

    2. 聚合函数(必会):如COUNT(), SUM(), AVG(), MAX(), MIN()等,用于统计和计算。 3. SQL关键字(必会):如SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY等,用于构建SQL查询语句。 4. SQL Select语句完整的...

    B07Java常见类库ppt课件(全).ppt

    Math 类提供了大量的数学运算方法,包括但不限于三角函数、指数、对数、平方根、绝对值等。Math类的所有方法都是静态的,可以直接通过类名调用,例如 `Math.sqrt()` 计算平方根,`Math.pow(a, b)` 计算a的b次方。 ...

    java 多线程.ppt,多线程

    为了避免多线程环境下资源竞争导致的数据不一致,Java提供了多种同步机制,包括synchronized关键字、Lock接口、wait()和notify()等。synchronized可以保证同一时间只有一个线程访问临界区,Lock提供更细粒度的锁...

    JAVA语言程序设计-第十四章 多线程

    在JAVA语言程序设计中,第十四章主要探讨的是多线程这一核心概念。多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。在Java中,多线程是通过实现Runnable...

    2024-2025年Java大-中厂高频面试题

    - **JRE (Java Runtime Environment)**: 是Java运行环境, 包含了Java虚拟机(JVM)、Java核心类库和支持文件, 用于运行Java程序, 主要面向最终用户。 #### 2. `==`与`equals`的区别 - **`==`**: 检查两个对象是否是...

    下拉框带模糊查询引入select2组件.zip

    标签"java js 下拉框"表明了这个话题涉及到的技术栈,其中"java"可能是用来处理后端数据的,而"js"则表示前端使用JavaScript进行交互逻辑处理,"下拉框"则是我们要讨论的核心元素。 在压缩包的文件名列表中,我们...

    中兴 IT 笔试题

    - B.2, 1, 3, 4, 5, 6:首先2入栈,然后出栈;再1入栈出栈;接着3、4、5、6依次入栈出栈,因此可能。 - C.3, 4, 2, 1, 5, 6:3、4依次入栈后出栈,然后2、1依次入栈后出栈;最后5、6依次入栈出栈,因此可能。 - D...

    jquery的时间控件,手把手教你

    jQuery UI是一个扩展jQuery的功能库,包含了许多UI组件,其中包括DateTimePicker。要使用这个插件,你需要先在你的项目中引入jQuery UI的CSS和JS文件。然后,你可以通过以下方式初始化DateTimePicker: ```html &lt;!...

Global site tag (gtag.js) - Google Analytics