`
knight_black_bob
  • 浏览: 841915 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 最小栈

阅读更多

 

 

 

public interface IMinMaxStack<T> {

	public T pop();
	public void push(T t);
	public T getMin();
	public T getMax();
	public int getLength();
}

 

public class MinMaxStack implements IMinMaxStack<Integer> {

	private static int maxLength = 5;
	private static int [] data= new int[maxLength];
	private static int [] mins= new int[maxLength];
	private static int [] maxs= new int[maxLength];
	private static int size = 0;
	private static int current = 0;
	private static int total = 0;

	private void growing(){
		if (current >= maxLength / 4  * 3 ) {
			maxLength = (maxLength *3)/2 + 1;
			data = Arrays.copyOf(data, maxLength);
			mins = Arrays.copyOf(mins, maxLength);
			maxs = Arrays.copyOf(maxs, maxLength);
		 }
	}
	
	@Override
	public Integer pop() {
		total --;
		if (current >= 0) {
			 int temp =	data[current-1] ;
			   current --;
			   return temp;
		}
		return null;
	}

	@Override
	public void push(Integer t) {
		total ++;
		growing();
		data[current] = t;  
		if(current == 0){
			mins[current] = t;
			maxs[current] = t;
		}else{
			if (mins[current-1] >= t) {
				mins[current] = t; 
			}else{
				mins[current] = mins[current-1]; 
			}
			if (maxs[current-1] <= t) {
				maxs[current] = t;
			}else{ 
				maxs[current] = maxs[current-1];
			}
			
		}
		current ++;
	}
 
	@Override
	public Integer getMin() {
		int temp = mins[current];
		return temp;
	}
 
	@Override
	public Integer getMax() { 
		int temp = maxs[current];
		return temp;
	}
	
	@Override
	public int getLength() { 
		return total;
	}
 

	 
	 public static void main(String[] args) {
		 MinMaxStack  ms = new MinMaxStack();
		 ms.push(6);
		 ms.push(2);
		 ms.push(7);
		 ms.push(1);
		 ms.push(5);
		 ms.push(3);
		 System.out.println("current\tlength\tpop\tmin\tmax");       
		 System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());       
		 System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());       
		 System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());       
		 System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());       
		 System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());       
		 System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax());       
	 }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者 

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信 以及扣扣群),没钱捧个人场,谢谢各位。

 

个人主页http://knight-black-bob.iteye.com/



 
 
 谢谢您的赞助,我会做的更好!

分享到:
评论

相关推荐

    leetcode常用算法java代码

    - **最小栈**:维护一个栈,同时能够返回栈内最小元素,常使用两个栈实现。 7. **树结构**: - **二叉搜索树**:左子节点的值小于父节点,右子节点的值大于父节点,便于查找、插入和删除操作。 - **AVL树**:自...

    java-leetcode面试题解Stack之第155题最小栈-题解.zip

    以下是使用Java实现这个最小栈的代码示例: ```java public class MinStack { private Stack&lt;Integer&gt; mainStack; private Stack&lt;Integer&gt; minStack; public MinStack() { mainStack = new Stack(); minStack...

    java面试宝典(内附真实软件公司面试题目)

    最后,JackyTao博客小栈整理.url指向的可能是某位专家的博客集合,其中可能包含更深入的技术讨论和实战案例,对于深化理解和扩展知识面非常有帮助。 总之,这份Java面试宝典覆盖了从基础到进阶的Java知识,结合实际...

    java开发书籍

    5. **面试准备**:Java1可能也包含了常见的面试问题和解答,帮助求职者熟悉常见的技术面试题型,如“两数之和”、“最小栈”或“LRU缓存”。 6. **最佳实践**:学习如何遵循良好的编程习惯和设计模式,如SOLID原则...

    java面试-leetcode面试题解之第155题最小栈-题解.zip

    第155题名为“最小栈”,是一道设计数据结构的问题,它要求我们实现一个栈,除了基本的栈操作(push和pop)之外,还要能提供一个getMin操作,能够在常数时间内获取栈中的最小元素。下面我们将详细探讨这个问题以及它...

    栈与队列ppt及代码

    "Stack_Queue"可能是包含Java代码的文件,可能包括了栈和队列的基本操作的示例代码,比如使用数组或链表实现,以及针对Google面试中可能出现的题目,如最小栈、环形队列等的解决方案。这些代码实例可以帮助学习者...

    java开发(汽车租赁系统)

    在Java开发领域,汽车租赁系统是一个典型的业务管理系统,它涵盖了用户管理、车辆管理、租赁管理、支付结算等多个功能模块。这个项目旨在为汽车租赁企业提供一套高效、便捷的运营平台,帮助他们更好地管理车辆资源,...

    学生管理系统\j2ee精品\java 学生管理系统

    \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统

    Java实现栈和队列面试题

    每次入栈时,如果新元素小于或等于最小栈的栈顶元素,则同时压入最小栈;`min()`操作直接返回最小栈的栈顶元素。 6. **判断push和pop序列是否一致**: 给定一个push序列和一个pop序列,判断是否能通过合法的push和...

    java版五子棋源码-shuati:刷题随笔

    java版五子棋源码 一、LeetCode刷题笔记 参考网站: https://leetcode-cn.com/problemset/all/ leetcode ...编程语言: Java 开始时间: 2020/10/19 ...最小栈 S #160 相交链表 S #167 两数之和II - 输入有序数组 S #1

    linux一键安装java.zip

    该工具提供了在linux环境的一键部署功能,可以大幅度减少开发人员的工作,不过压缩包里面只提供了jdk1.8,如果需要安装其他版本,则将所需版本下载后放到该压缩包中,则可以...代码小栈,免费获取更多工具包和学习视频

    LeetCode题目分类与面试问题整理,附带所有java算法代码

    Hash相关 q1_两数之和 q387_字符串中的第一个唯一字符 链表操作 q2_两数相加 q19_删除链表的倒数第N个节点 q25_k个一组翻转链表 q61_旋转链表 q138_复制带随机指针的链表 ...q155_最小栈 q224_基本计算

    LeetCode:leetcode和剑指offer题解的Java实现

    书中的题目涵盖了许多经典算法,例如,回溯法求解全排列、最小栈的设计、二叉搜索树的构造等。这些问题的Java实现要求开发者不仅要有扎实的编程基础,还需要具备良好的逻辑思维和问题分析能力。 在Java实现《剑指...

    leetcode java

    - 最小栈(Min Stack)要求设计一个栈,在该栈中寻找最小值的时间复杂度为O(1)。 - 逆波兰表达式求值(Evaluate Reverse Polish Notation)则是关于后缀表达式的计算。 **动态规划(Dynamic Programming)** 动态...

    Leetcode扑克-LeetCodeJava:leetcode刷题java

    Leetcode扑克 LeetCodeJava ...最小栈 Day23 复制带随机指针的链表 Day24 将二叉搜索树转化为排序的双向链表 Day25 二叉树的序列化与反序列化 Day26 数据流的中位数 Day27 最大子序和 Day28 数字 1 的

    jigloo_464(java可视化开发工具及使用方法)

    Java Swing是一种用于构建Java桌面应用程序的图形用户界面(GUI)工具包,而Jigloo则是一个强大的辅助开发工具,尤其适用于需要使用Swing进行GUI设计的开发者。Jigloo是作为MyEclipse集成开发环境(IDE)的一个插件...

    2024年java面试题-jvm性能调优面试题第一部分

    例如,如果应用程序中存在大量的递归调用或需要启动大量线程,可以适当减小栈的大小,以减少内存的消耗。 ### 2. JVM内存模型详解 JVM内存模型主要包括以下几个部分: - **程序计数器**:每个线程拥有一个独立的...

    一个五子棋游戏的Java代码.rar

    《五子棋游戏的Java实现详解》 在编程领域,实现一个简单的五子棋游戏是初学者提升技能、理解游戏逻辑与程序设计相结合的良好实践。本篇将详细讲解如何使用Java语言来构建一个五子棋游戏,涵盖核心知识点,包括棋盘...

    java二叉树算法源码-algorithm-primer:algorithmprimer-算法基础、Leetcode编程和剑指offer,Ja

    最小栈 Min Stack Easy 394 字符串编码 Decode String Medium 链表 No Problem Solution Difficulty Tag 2 两数相加 Add Two Numbers Medium 19 删除链表倒数第N个节点 Remove Nth Node From End of List Medium 21 ...

    LuoJhno#knowledge#包含min的最小栈1

    包含min的最小栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的 min 函数。public void push(int num) {pub

Global site tag (gtag.js) - Google Analytics