java实现栈-输出最大值,最小值,时间复杂度O(1)
2018-03-15 17:31
2026 查看
问题:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的getMin函数。在该栈中,调用getMin、push及pop的时间复杂度都是O(1).
最小值思路:用一个辅助栈stack2记住每次入栈stack1的当前最小值:在stack1入栈时,往stack2中加入当前最小值;stack1元素出栈时,stack2也出栈一个元素。最小值从stack2中获取及栈顶元素。O(1)
最大值思路:同上O(1)
最小值思路:用一个辅助栈stack2记住每次入栈stack1的当前最小值:在stack1入栈时,往stack2中加入当前最小值;stack1元素出栈时,stack2也出栈一个元素。最小值从stack2中获取及栈顶元素。O(1)
最大值思路:同上O(1)
package com.sheepmu; import java.util.Arrays; import java.util.Stack; public class SpecialStack<E extends Comparable<E>> { Stack<E> stack1=new Stack<E>(); Stack<E> stackMin=new Stack<E>();//存放求最小值的栈 Stack<E> stackMax=new Stack<E>();//存放求最大值的栈 public void push(E e) { stack1.push(e); if(stackMin.isEmpty()||e.compareTo(stackMin.peek())<0) stackMin.push(e);//若最小栈为空push进stack时就同时把它push进stackMin; else if(e.compareTo(stackMin.peek())>0) stackMin.push(stackMin.peek()); if(stackMax.isEmpty()||e.compareTo(stackMin.peek())>0) stackMax.push(e); else if(e.compareTo(stackMax.peek())<0) stackMin.push(stackMax.peek()); } public E pop()//一定要记着,非空才能pop() { if(!stack1.isEmpty()&&!stackMin.isEmpty()&&!stackMax.isEmpty()) { E e=stack1.pop(); stackMin.pop(); stackMax.pop(); return e; } else { System.out.println("栈已经为空了"); return null; } } public E getMin() { return stackMin.peek(); } public E getMax() { return stackMax.peek(); } public E getMed() { E[] ss=stack1.toArray(new E[stack.size()]);//stack1.toArray()返回的是Object[], 栈----->数组;不能toArray后再强制转换,会报错 Arrays.sort(ss); return ss[ss.length/2]; } }
相关文章推荐
- java代码--实现随机输出10个随机数,并显示最大值,最小值
- 【算法数据结构Java实现】时间复杂度为O(n)的最大和序列
- 【程序35】 ArrayChange.java 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- Chapter 3 | Stacks and Queues--实现一个函数返回栈中的最小值,时间复杂度为O(1)
- 用java写的小程序:实现输出万年历,在系统时间的对应那天标记星号输出
- java二维数组求每行最大值,每列最小值,及输出数组主对角线上的元素
- [java实现]找一个数组的最大和的连续子数组(时间复杂度 O(n))
- Map实现从0~100中随机生成50个数,统计出现的数字最大值和最小值,输出出现最多的次数及对应的数字
- 自定义数组,实现输出改数组的长度、最大值和最小值
- 011实现一个栈,除了push和pop操作,还要实现min函数以返回栈中的最小值,时间复杂度都为O(1)(keep it up)
- 插入排序算法的java实现及时间复杂度分析
- java实现10s时间的输出和日期格式
- 编写程序:从键盘上输入若干个整数(以输入-1作为结束标识),输出这些数中的最大值和最小值,要求编写一个函数实现最大值和最小值的求取。
- 输入n个数,输出最小的k个数,java实现
- PHP 定义栈结构,实现min函数,获取栈最小元素,要求时间复杂度为O(1)
- Java实现最小公倍数和最大公约数
- java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序
- 同时找出数组的最大值和最小值,要求时间复杂度为o(n)
- 无序序列中O(n)时间复杂度寻找最小(最大)的K个数
- 实现一个栈,获取其中最大元素,获取时间复杂度为O(1)