设计一个栈实现最大值函数

【数据结构】实现栈-输出最大值,最小值,时间复杂度O(1) @TOC 问题 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的getMin和最大元素的getMax函数。在该栈中,调用getMin、getMax、push及pop的时间复杂度都是O(1).。 解题思路 用辅助栈记住每次入栈的当前最小值/最大值:在入栈时,往辅助栈中加入当前最小值/最大值;出栈时,辅组栈也出栈一个元素。最小值/最大值从辅助栈中获取栈顶元素。 基础代码实现 import java.util.ArrayList; import java.util.EmptyStackExceptio 阅读详情
/**
设计一个栈结构,使得取出栈中最大值时间复杂度为O(1)
就是开辟多一个存储最大值索引的栈,该栈和存储数据的栈保持同步,即栈顶指针同时作用这两个栈。
*/
#include <iostream>
using namespace std;

class myStack {
	public:
		myStack() {
			MAX		 = 10;//栈的容量
			top		 = -1;//oriSTack和maxStack的上标
			maxIndex = -1;//最大值索引
			oriStack = new int[MAX];//原始的stack
			maxStack = new int[MAX]; //存放最大值索引的stack
		}

		void push(int elem) {
			top++;
			if(top>=MAX) { //如果上标大于MAX时
				cout<<"Input error!";
				return ;
			}

			oriStack[top] = elem;

			if(elem>getMax()) {
				maxStack[top] =top;//存放标记
				maxIndex = top;
			} else {
				maxStack[top]=maxIndex;
			}
		}

		int pop() {
			if(top<0) {
				cout<<"Output error!";
				return -1;
			}
			int elem = oriStack[top];
			if(top==0) {
				maxIndex = -1;
			} else if(top==maxIndex) {
				maxIndex=maxStack[top-1];
			}
			top--;
			return elem;
		}

		int getMax() {
			if(maxIndex>=0) {
				return oriStack[maxIndex];
			} else {
				return 0;
			}
		}

	private:
		int top;//栈a的最大值上标
		int maxIndex;//最大值索引
		int MAX;
		int *oriStack;
		int *maxStack;
};

int main() {
	myStack ms;
	ms.push(5);
	ms.push(7);
	ms.push(1);
	ms.push(9);
	ms.push(7);
	ms.push(1);
	ms.pop();
	cout<<ms.getMax();
}

C++基础实战:数组最大值查找与输出完整项目 经过这一番深挖,你会发现即使是“求最大值”这种基础操作,背后也藏着不少学问:数组不仅是连续内存,还有栈/堆之分、静态/动态之别;函数参数传递要考虑退化问题,合理使用引用和模板;控制流中的if和for并非绝对安全,需关注边界和性能;main函数不只是入口,更是资源管理和错误反馈的关键节点;工程化项目必须模块化,配合 Makefile/CMake 提高构建效率;文档和注释不是形式主义,而是团队协作的生命线。 阅读详情

相关推荐

基于深度学习的中文方言识别模型训练实战

本文介绍了一个基于深度学习的中文方言识别模型开发流程。项目采用PyTorch框架和Chinese-BERT-wwm预训练模型,构建了包含BERT基础层、方言特征增强层和注意力机制的多方言分类系统。文中详细阐述了数据收集策略,包括从社交媒体、语料库和众包平台获取多源数据,并实现了文本清洗、同义词替换和回译等数据增强技术。模型架构部分展示了如何在BERT基础上添加方言特征提取层和多头注意力机制来提升识别性能。该方案支持普通话、粤语等6种主要方言的识别,目标准确率达90%以上,响应时间小于100ms,适用于智能客

电脑管家 1730

设计一个栈,提供一个函数能够找出栈内最大的元素,时间复杂度为O(1)

这是一道淘米网的面试题,当时面试官直接拿出一张纸来让我写出实现方法。我思考了一会,就是关于时间复杂度这块,实在是没有办法,因为我想的都是要 遍历一遍这个栈,这样肯定超了,在面试完回来之后,我思考了一段时间,网上了解了一下,得出一个解题思路 想要找出最大的数,且时间复杂度为O(1),那么就一定要知道这个最大的数在哪放着,那么我们就可以一次性的找到他。 利用栈的特性,我可以一次压2个数,一个数是

gengdidi的专栏 3146

STM32硬件SPI驱动W5500以太网模块全流程(附避坑指南)

本文详细介绍了如何使用STM32硬件SPI驱动W5500以太网模块,包括开发环境准备、SPI接口配置、网络参数设置及常见问题排查。通过官方驱动移植和实战案例,帮助开发者快速实现以太网通信功能,适用于智能家居、工业控制等物联网应用场景。

weixin_29192141的博客 364

【LeetCode 栈】最大栈(716)

【LeetCode 栈】最大栈(716)

weixin_37780776的博客 1358

保姆级教程:Win10/Win11系统下ArcGIS 10.2中文版完整安装与破解(含License Manager启动失败解决方案)

本文提供Windows 10/11系统下ArcGIS 10.2中文版的完整安装与破解教程,重点解决License Manager启动失败等常见问题。从安装准备、破解文件处理到最终配置验证,详细指导用户完成每一步操作,确保软件正常运行。特别针对主机名修改、端口占用等疑难问题提供专业解决方案。

weixin_29596051的博客 545

微信Dat文件转图片(文末含工具下载)

PC端微信dat图片转换为jpg格式

weixin_40704848的博客 8081

栈最值元素的获取

设计一种数据结构,满足栈的“后进先出”性质,实 现以下3种操作: 1)Push(v,S):将v压入到栈S; 2)Pop(S):弹出栈顶元素; 3)Maxelement(S):返回栈S中最大元素; 并且使每种操作的时间复杂度尽可能的低。 #pragma warning(disable :4996) #include <stdio.h> #define maxlength 1000 t...

weixin_43172803的博客 537

特征提取神操作,登上Nature!计算速度狂提300%!

登上Nature!作者提出CVOCA,一种能同时处理数据的幅度和相位信息的卷积模型,在性能远超SOTA的同时,计算速度更是狂飙300%!实际上,作为机器学习和深度学习的核心技术,特征提取一直都是研究的热门!它直接影响着模型的准确性、计算效率、可解释性……同时,它也是我们改模型涨点,最好操作的部分!因为可切入点的真的非常之丰富,不管是轻量化、多尺度、时域与频域结合等,都能使模型性能得到提升!

2401_82426425的博客 4036

最大栈的实现

问题描述 一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。 设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。 可以修改栈的存储方式,push,pop的操作,但是要保证O(1)的时间复杂度,空间时间复杂度无要求 思路 比较容易想到的是除了原始数据栈之外,再声明一个存放最大值的栈。每次加入数据后,都判断求得最新的最大值,然后把当前的最大值存入到maxSta...

SMonkeyKing的博客 1134

SpaceMesh Mining 教程

當參與Spacemesh的用戶在完成P盤工作後需要完成兩個部分工作:PoET+PoST,這兩部分均是在不同的規定時間完成,具體可參考後續的時間表。註意!只有PoET和PoST均完成的用戶才可以獲得收益。Spacemesh相關P盤教程:說明:1.Spacemesh每個紀元epoch周期為14天,在8月7日完成PoET的將在8月20日完成PoST,收益將在8月25日後發放(之後用戶收益將每隔14天發放一次) 後續PoET時間為8月7日+N14 **後續PoST時間為8月20日+N。

Yc Chan 的个人博客 1043

vue2/3 - 详细实现内网使用离线百度地图功能,百度地图如何离线加载详细教程(内网部署及使用),在vue中无需网络离线使用百度地图相关功能,提供最新完整的瓦片资源下载及相关工具(示例代码,一键复制

vue,vue2,vue3,百度地图,离线使用百度地图,百度地图瓦片官方下载,vue内网使用百度地图离线无网络,断网情况下使用百度地图,vue离线百度地图教程,如何实现内网部署百度地图,无需联网离线使用,vue+ts实现离线百度地图 内网离线百度地图,如何在百度地图Vue项目中下载离线地图,百度离线地图加载不出来,百度地图离线使用不显示怎么办,怎么解决vue内网使用离线百度地图加载失败问题,vue实现离线地图+百度瓦片,vue引入百度离线地图,vue项目如何使用离线百度地图和自定义地图样式,百度离线地图的下

✅ 精选推荐文章 1万+

js 包含min函数的栈_数据结构与算法(栈和队列) --javascript语言描述

用两个栈实现队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。var stack1 = [];var stack2 = [];function push(node){stack1.push(node);}function pop(){if(stack2.length <= 0) {while(stack1.length > 0) {let data...

weixin_29721821的博客 138

北斗导航 | 卫星信号捕获跟踪原理解析

卫星信号的捕获与跟踪是导航接收机的"眼睛",其性能直接决定定位精度、动态适应性和抗干扰能力。随着北斗三号全球组网完成,新一代接收机正朝着。两大核心阶段,二者共同构成定位的基础。调制,频谱主瓣宽度达4.092MHz,较传统BPSK调制抗干扰能力提升3dB[38]。的目标持续演进,在自动驾驶、精密农业等领域展现出巨大应用潜力。二维空间中搜索峰值相关能量[4]。卫星导航接收机对信号的处理可分为。北斗三号B1C/B2a信号采用。北斗三号新增的B1C信号采用。

尘世冰封的专栏 772

栈和队列

复习的时候,如果想看原题目,直接搜索每题前面的序号,优先在leetcode上搜(leetcode包含了剑指)。 ☺☺☺ (1)剑指9.1:用两个栈实现队列(LeetCode225) 不管是用两个栈实现队列,还是用两个队列实现栈,我们都仅在pop时处理,这样方便理解,也方便记忆。 同样的题,再LeetCode和牛客上竟然不一样!!emmm 使用栈实现队列的下列操作: push(x) – 将一个元素放...

人大神成长记2 903

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

剑指offer之:栈与队列(相关题目)

(1)用两个栈实现队列 (2)包含min函数的栈 (3)栈的压入,弹出序列 (4)队列的最大值

ypshowm的博客 173

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

剑指offer-栈专题

剑指 Offer 09. 用两个栈实现队列 题目 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例: 输入: [“CQueue”,“appendTail”,“deleteHead”,“deleteHead”] [[],[3],[],[]] 输出:[null,null,3,-1] 示例2: 输入: [“CQueue”

Mochadrone的博客 189

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LeetCode【剑指offer】系列(栈与队列篇)

搜集《剑指offer》在Leetcode上对应的题目,给出题目链接和题解

永远相信美好的事情即将发生 1000

剑指offer之栈、堆、队列

1.用两个栈实现队列 题目:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof 思路: 加入队尾 appendTail()函数: 将数字 val 加入栈 A 即可。 删除队首deleteHead()函数: 有以下三种情况。 当栈 B 不为空: B中仍有已完成倒序的元素,因此直接返回 B 的栈顶元素。 否则,当 A 为空: 即两个栈都为空,无元素,因此返回 -1−1 。 否则: 将栈 A 元素全部转移至

ttdss12345678的博客 232

js-剑指刷题记录(栈与队列)

1.两个栈实现队列 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 我的解法 栈后进先出,队列先进先出,入队操作没啥可说的,直接压入instack就行了。出队操作把instack里面的数据从栈顶一个个弹出,然后outstack一个个接收,这样instack最先压入的数据就跑到了outstack的栈顶,把栈顶数据弹出返回就是一次pop操作了。 同时要注意两个栈都...

adrenaline is zzz 200

剑指offer--栈和队列集合

1.用两个栈实现队列 2.剑指offer–包含min函数的栈 3.剑指offer–栈的压入、弹出序列

u010160949的博客 248

《剑指Offer》栈&队列全题——妙解思路,难度由浅入深

《剑指Offer》中所有关于栈&队列的题都在这里啦~巧妙解题思路,快速学会

CYK_byte的博客 257

剑指offer(四):栈和队列及数学相关(cpp)

剑指offer栈和队列及数学相关习题,基于CPP

Tryturned 210

剑指offer 队列&栈

三、队列&栈 JZ9 用两个栈实现队列 用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。 数据范围:n≤1000 要求:存储n个元素的空间复杂度为 O(n),插入与删除的时间复杂度都是 O(1) push直接放入stack1,stack1用于存储数据。 pop 若stack2中有数据,直接pop,否则把stack1中的所有数据放入stack2,返回最上

weixin_38867731的博客 157

牛客101:堆/栈/队列

本文总结了8个常见栈与队列算法题解:1.用两个栈实现队列;2.实现包含min函数的栈(双栈法);3.有效括号匹配(栈);4.滑动窗口最大值(暴力+双端队列优化);5.最小k个数(大根堆);6.寻找第k大(快速选择);7.数据流中位数(大小根堆);8.表达式求值(递归+栈)。主要涉及栈和队列的基本操作及其应用场景,包括括号匹配、滑动窗口、堆的使用等典型问题,展示了使用栈和队列解决问题的多种思路。

_dindong的博客 710

计算机程序设计c++ 14-1:模版

函数多态 函数重载是最佳方案吗? 假如设计一个求两参数最大值的函数,在实践中可能需要定义四个函数: int max ( int a, int b ) { return ( a > b ) ? a , b; } long max ( long a, long b ) { return ( a > b ) ? a , b;} double max ( double a, double b ) { return ( a >b)? a , b; } char max ( char a, cha

uncle_ll的博客 751

《剑指offer》------栈/队列专题

//需要考虑S2是否为空 import java.util.Stack; public class Solution { Stack&lt;Integer&gt; stack1 = new Stack&lt;Integer&gt;(); Stack&lt;Integer&gt; stack2 = new Stack&lt;Integer&gt;(); //队列...

多多 269
上一篇: 构造函数中是否可以调用虚函数
下一篇: 大小端
sumup
博客等级 码龄9年 5粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值