news 2026/4/30 4:00:28

手把手带你了解C++最小栈

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手带你了解C++最小栈

push(x)—— 将元素 x 推入栈中。

pop()—— 删除栈顶的元素。

top()—— 获取栈顶元素。

getMin()—— 检索栈中的最小元素。

示例:

输入:

[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”]

[[],[-2],[0],[-3],[],[],[],[]]

输出:

[null,null,null,null,-3,null,0,-2]

解释:

MinStack minStack = new MinStack();

minStack.push(-2);

minStack.push(0);

minStack.push(-3);

minStack.getMin(); --> 返回 -3.

minStack.pop();

minStack.top(); --> 返回 0.

minStack.getMin(); --> 返回 -2.

思路

C++支持的栈(原生栈),可以实现 push、pop、top(peek), 但是要获取最小元素, 一种方法是通过暴力搜索,从头到尾遍历整个,那么时间复杂度是 O(n),不是在常数级获取最小值, 不符合题目的要求。

我们可以设置两个栈,一个数据栈 datastack,用于存放需要存放的数据,一个记录最小值的栈 sortedstack。

每次 push 操作之后, 保存当前 push 元素之后数据栈中的最小值, 因为从第一次 push 到之后的每次 push 操作,我们知道每次 push 的值,也很容易知道当前的栈中的最小值。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

```cpp

classMinStack {

public:

/** initialize your data structure here. */

//创建两个栈

stack<int> datastack;//数据栈

stack<int> sortedstack;//有序栈,栈底最大,栈顶最小,有<=栈顶的元素才push

MinStack() {

}

voidpush(intval) {

datastack.push(val);//将值push到数据栈

//有序栈

//当有序栈为空 或 值小于等于有序栈的栈顶 就push

if(sortedstack.empty()||val<=sortedstack.top())//sortedstack==sortedstack.empty() 错误

sortedstack.push(val);

}

voidpop() {

if(datastack.top()==sortedstack.top())//数据栈的栈顶 和 有序栈的栈顶 相同, 有序栈出栈

sortedstack.pop();

datastack.pop();//数据栈一直在出栈

}

inttop() {

returndatastack.top();

}

intgetMin() {

returnsortedstack.top();

}

};

/**

* Your MinStack object will be instantiated and called as such:

* MinStack* obj = new MinStack();

* obj->push(val);

* obj->pop();

* int param_3 = obj->top();

* int param_4 = obj->getMin();

*/

总结

本篇文章就到这里了,希望能给你带来帮助

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 3:58:24

基于Simulink的电池热管理系统(BTMS)多目标优化​

目录 手把手教你学Simulink——基于Simulink的电池热管理系统(BTMS)多目标优化​ 摘要​ 一、背景与挑战​ 1.1 为什么电池越快充,温差越容易“失控”?​ 1.2 核心痛点与设计目标​ 二、系统架构与核心控制推导​ 2.1 整体架构:从“盲目制冷”到“多目标运筹帷幄”的…

作者头像 李华
网站建设 2026/4/30 3:53:31

动态粒度内存系统与虚拟化ECC技术解析

1. 动态粒度内存系统&#xff08;DGMS&#xff09;技术解析 现代计算架构中&#xff0c;内存系统已成为性能瓶颈的关键所在。传统DRAM设计采用固定的64字节访问粒度&#xff0c;这种"一刀切"的设计在面对不同空间局部性特征的应用时&#xff0c;暴露出了明显的效率缺…

作者头像 李华
网站建设 2026/4/30 3:42:24

云原生应用性能优化:从代码到基础设施

云原生应用性能优化&#xff1a;从代码到基础设施 一、性能优化的概念与价值 1.1 性能优化的定义 性能优化是指通过调整和改进应用和基础设施&#xff0c;提高系统的响应速度、吞吐量和资源利用率。在云原生环境中&#xff0c;性能优化需要考虑容器化、微服务架构和动态伸缩等特…

作者头像 李华
网站建设 2026/4/30 3:39:21

Ring-flash-linear-2.0架构:高效LLM推理的混合线性注意力设计

1. 项目概述&#xff1a;Ring-flash-linear-2.0架构解析在大型语言模型&#xff08;LLM&#xff09;领域&#xff0c;测试时扩展&#xff08;Test-Time Scaling&#xff09;已成为突破模型能力上限的关键技术路径。然而传统注意力机制在超长上下文推理场景中&#xff0c;面临着…

作者头像 李华
网站建设 2026/4/30 3:36:24

前端错误处理机制

前端错误处理机制&#xff1a;构建稳健的用户体验 在当今高度依赖Web应用的时代&#xff0c;前端错误处理机制的重要性不言而喻。无论是用户输入错误、网络请求失败&#xff0c;还是代码逻辑缺陷&#xff0c;都可能直接影响用户体验。良好的错误处理不仅能提升应用的稳定性&am…

作者头像 李华