当前位置: 首页 > news >正文

力扣面试150(44/150)

7.30 155. 最小栈

设计一个支持 pushpoptop 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

  • MinStack() 初始化堆栈对象。
  • void push(int val) 将元素val推入堆栈。
  • void pop() 删除堆栈顶部的元素。
  • int top() 获取堆栈顶部的元素。
  • int getMin() 获取堆栈中的最小元素。

我的思路:

最开始我其实想得蛮简单的,直接维护一个min就可以了,但是我发现其实这个min是不断变化的,因为pop的原因,min很有可能会被pop掉,所以我又想到直接动态维护一个minStack,里面是升序的序列,但是我还是想得太简单了,我发现你也有可能pop出minStack里面的值,太伤脑筋了吧。但是我发现每次geMin和stack里面的最后一个数字总是有关系的,干脆维护一个当前数值的最小栈,stack实现pop操作,minStack也对应实现pop操作就可以啦

// 返回一个数组模拟栈
var MinStack = function() {this.stack = [];this.minStack = [];return null;
};/** * @param {number} val* @return {void}*/
MinStack.prototype.push = function(val) {let minLen = this.minStack.length;if(minLen === 0){this.minStack.push(val);}else {let min = this.minStack[this.minStack.length - 1];min > val ?  this.minStack.push(val) :  this.minStack.push(min);}// 把最小的放在数组当中的最后一个this.stack.push(val);return null;};/*** @return {void}*/
MinStack.prototype.pop = function() {this.stack.pop();this.minStack.pop();console.log("pop" + this.minStack);return null;};/*** @return {number}*/
MinStack.prototype.top = function() {let len = this.stack.length;return this.stack[len - 1];};/*** @return {number}*/
MinStack.prototype.getMin = function() {let len = this.minStack.length;return this.minStack[len - 1];};/** * Your MinStack object will be instantiated and called as such:* var obj = new MinStack()* obj.push(val)* obj.pop()* var param_3 = obj.top()* var param_4 = obj.getMin()*/
//  本来想要新建一个min:最小值,但是因为有pop,很有可能会把最小的也pop掉
//  那么这个时候最小值就是动态变化的了
// minStack里面只存储升序的数值是不行的,也是因为pop的问题
// minStack里面存储的是每一个数的情况下的的最小值

总结:这段代码实现了一个最小栈(MinStack),能够在常数时间内获取栈中的最小元素。核心思路是使用两个栈:一个主栈stack存储所有元素,另一个辅助栈minStack存储每个状态下的最小值。

push操作时,会同时向两个栈添加元素。对于minStack,如果它是空的或者新元素比当前最小值更小,就添加新元素;否则就添加当前最小值。这样minStack的栈顶始终是当前栈的最小值。

pop操作会同时从两个栈移除栈顶元素,保持同步。

top方法直接返回主栈的栈顶元素。

getMin方法返回辅助栈的栈顶元素,也就是当前栈的最小值。

这种设计确保了所有操作(push、pop、top、getMin)都能在O(1)时间内完成,空间复杂度为O(n),最坏情况下需要额外存储n个元素。

http://www.dtcms.com/a/306573.html

相关文章:

  • Linux 系统进程管理与计划任务详解
  • Kafka 单机多 Broker 实例集群搭建 | 详情
  • 育儿补贴之外,父母更需要的 “认知补贴”|创客匠人
  • 测试用例颗粒度全解析
  • 领域驱动设计(DDD)在分布式系统中的架构实践
  • Linux:haproxy
  • ORACLE的表维护
  • Ubuntu LNMP
  • 容器化与Docker核心原理
  • 流程制造的数字孪生:从黑箱生产到全息掌控
  • 滚珠导轨在电子制造中的流畅性优势
  • 虚实共生的智能革命:元宇宙、物联网与 AI 融合生态全景图谱
  • 高可靠液晶屏系统解决方案深度解析
  • 基于 Python 开发的信阳市天气数据可视化系统源代码+数据库+课程报告
  • 老旧泵房物联网改造方案与成本效益深度解析
  • C++线程详解
  • 关于“LoggerFactory is not a Logback LoggerContext but Logback is on ......“的解决方案
  • [源力觉醒 创作者计划]_巅峰对话:文心 vs. DeepSeek/Qwen 3.0 深度解析
  • Wan2.2 - 阿里最新开源视频生成模型 支持文生视频/图生视频 支持50系显卡 一键整合包
  • 293F细胞是什么?
  • C语言《智能自平衡小车,实现平衡功能的基础上,加入了超声波避障、超声波跟随、蓝牙遥控等功能》+源代码+文档说明
  • DEC 指令
  • spark的broadcast variables
  • 重庆邮电大学2026年计算机/软件/人工智能/网安考研备考指南
  • css初学者第二天
  • RabbitMQ 发送方确认的两大工具 (With Spring Boot)
  • 15、点云<—>深度图转换原理
  • Centos 7.9安装部署cobbler-自动化部署服务器完整教程
  • 【Flask 基础 ①】 | 路由、参数与模板渲染
  • 【AI】开源项目整理