O(1)时间复杂度求栈中最小元素
import java.util.Stack; /**
* 功能:O(1)时间复杂度求栈中最小元素
* 思路:空间换取时间,使用两个栈,stack1栈存储数据,stack2栈存储最小值;
* stack1入栈时,发现比stack2栈顶元素还小,则同时入stack2;stack1出栈时,同时也将stack2中的元素出栈。
*/
public class Main { private Stack<Integer> stackValue = new Stack<Integer>();
private Stack<Integer> stackMin = new Stack<Integer>(); /**
* @param integer
*/
public void push(Integer integer) {
stackValue.push(integer);
if (integer < getMin()) {
stackMin.push(integer);
}
} /**
* @return
*/
public Integer pop() {
if (stackValue.peek() == stackMin.peek()) {
stackMin.pop();
}
return stackValue.pop();
} /**
* @return
*/
public Integer getMin() {
if (stackMin.size() == 0) {
return Integer.MAX_VALUE;
} return stackMin.peek();
} public static void main(String[] args) { Main main = new Main(); main.push(10);
main.push(20);
main.push(9);
main.push(15); System.out.println(main.getMin());
}
}
O(1)时间复杂度求栈中最小元素的更多相关文章
- O(1)时间复杂度实现入栈、出栈、获得栈中最小元素、获得栈中最大元素(转)
题目要求:定义栈的数据结构,添加min().max()函数(动态获取当前状态栈中的最小元素.最大元素),要求push().pop().min().max()的时间复杂度都是O(1). 思路解析:根据栈 ...
- 如何在O(1)时间复杂度获取栈中最大值和最小值
问题描述: 如何在O(1)时间复杂度获取栈中的最大值和最小值? 问题分析: 普通栈规定的push(入栈).pop(出栈).peek(查看栈顶)等操作都只能在栈顶上操作,如果栈中元素是有序的,那么我们就 ...
- Python求列表中某个元素的下标
一.求列表中某个元素的下标 def findindex(org, x, pos=-1): counts = org.count(x) #先求出org中包含x的个数 if counts == 0: #个 ...
- C语言数据结构链栈(创建、入栈、出栈、取栈顶元素、遍历链栈中的元素)
/**创建链栈*创建一个top指针代表head指针*采用链式存储结构*采用头插法创建链表*操作 创建 出栈 入栈 取栈顶元素*创建数据域的结构体*创建数据域的名称指针*使用随机函数对数据域的编号进行赋 ...
- 给定数组长度2n,分成n对,求n对最小元素之和最大
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大. 示例 ...
- 求数组中最小的k个数
题目:输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. package test; import java.util.Arra ...
- 实现栈最小元素的min函数
#include<iostream> #include<stack> using namespace std; class min_stack { public: void p ...
- 《剑指Offer》第20题(Java实现):定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
一.题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 二.思路解析 首先定义一个Integer类型的栈,记为stack,此栈用来完成数据 ...
- 【数据结构和算法】 O(1)时间取得栈中的最大 / 最小元素值
常数时间取得栈中的元素最大值和最小值,我们可以想到当push的时候比较一下,如果待push元素值小于栈顶元素,则更新min值,最大值亦然. 这样有个问题就是当pop的时候,就没了最大最小值. 于是上网 ...
随机推荐
- Sqlserver 每日订单半小时数据统计
) '订单数' FROM (SELECT CASE THEN ), create_at, ) ),DATEPART(hh, create_at))+':00:00') ELSE ), create_a ...
- Linux第一二章笔记
第一章 Linux内核简介 1. Unix内核的特点 简洁:仅提供系统调用并有一个非常明确的设计目的 抽象:几乎所有东西都被当做文件 可移植性:使用C语言编写,使得其在各种硬件体系架构面前都具备令人惊 ...
- YQCB冲刺周第四天
上图站立会议 任务看板: 今天的任务:做登录身份的验证,区别普通用户和超级管理员 遇到的困难:中文乱码问题
- c#窗体移动与窗体阴影效果
//步骤//1.导入代码//2.事件中添加form_1mousedown函数//3.在load函数中定义AnimateWindow语句,注意有两个引用.//4.DllImport若有错误,按shift ...
- Pytorch相关内容
---恢复内容开始--- Pytorch中文官方文档:https://pytorch-cn.readthedocs.io/zh/latest/package_references/torch-nn P ...
- HighCharts点击柱形或饼块等加URL或Click事件
我们在做图表的时候,有时候需要在单个数据上加链接或点击事件,是在plotOptions里的events里设置的: 如下代码: plotOptions: { pie: { cursor: 'pointe ...
- C语言词频统计设计
项目需求: 1.设计一个词频统计小软件,对给定的英文文章进行单词频率的统计. 2.文章中相应的标点不计入统计. 3.将统计结果以从大到小的排序方式输出. 设计: 1.因为功能相对简单,采用C语言直接进 ...
- Git命令提交项目代码
Git客户端安装 今天就结合`GitHub`,通过`Git`命令,来了解如何实现开源代码库以及版本控制 GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托 ...
- SQLSERVER 的资源限制
https://docs.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server?view= ...
- [转帖].net 4.8 将不再支持win7 win8 版本
ZT:https://blogs.msdn.microsoft.com/dotnet/2018/07/18/announcing-net-framework-4-8-early-access-buil ...