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

155最小栈/c++

155. 最小栈 - 力扣(LeetCode)

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

实现MinStack类:

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

示例 1:

输入:["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.

题解1

struct Node { int lastmin; int val; Node* next; // 构造函数(可选,但推荐) Node() : lastmin(0), val(0), next(nullptr) {} }; class MinStack { private: int min_val; // 避免与函数 min 冲突,改名为 min_val Node* top_node; // 指向头节点(哨兵节点) public: MinStack() { top_node = new Node(); // 创建哨兵头节点 min_val = INT_MAX; // 初始最小值设为最大(更健壮) } void push(int val) { // 如果栈为空(即第一个真实元素) if (top_node->next == nullptr) { min_val = val; } Node* node = new Node(); node->val = val; node->lastmin = min_val; // 保存当前最小值(用于 pop 时恢复) min_val = std::min(min_val, val); // 更新全局最小值 node->next = top_node->next; top_node->next = node; } void pop() { if (top_node->next == nullptr) return; // 安全检查 Node* node = top_node->next; min_val = node->lastmin; // 恢复上一个最小值 top_node->next = node->next; delete node; // 释放内存! } int top() { return top_node->next->val; } int getMin() { return min_val; } // 可选:析构函数,防止内存泄漏 ~MinStack() { while (top_node != nullptr) { Node* temp = top_node; top_node = top_node->next; delete temp; } } }; /** * 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(); */

官方题解

class MinStack { stack<int> x_stack; stack<int> min_stack; public: MinStack() { min_stack.push(INT_MAX); } void push(int x) { x_stack.push(x); min_stack.push(min(min_stack.top(), x)); } void pop() { x_stack.pop(); min_stack.pop(); } int top() { return x_stack.top(); } int getMin() { return min_stack.top(); } };
http://www.jsqmd.com/news/396497/

相关文章:

  • Python基于Vue的 民宿酒店预约管理系统的设计与实现django flask pycharm
  • 977. 有序数组的平方/c++
  • Python基于Vue的高校毕业生就业管理系统设计与开发 django flask pycharm
  • 316. 去除重复字母/c++
  • 强烈安利!10个一键生成论文工具测评:专科生毕业论文写作必备神器
  • 2026年北京艾美手表维修站推荐:基于长期稳定性评价,针对应急与日常保养场景 - 十大品牌推荐
  • 哪家维修站更专业?2026年北京艾美手表维修推荐评测,聚焦售后保障与网点覆盖 - 十大品牌推荐
  • 看这里!2026年2月当地口碑好的驾校公司推荐榜,驾校/学车驾校/考摩特车照/学车驾照/学大车,驾校公司推荐排行榜单 - 品牌推荐师
  • 2026年,什么样的CMS才能满足真实的建站需求
  • 从零起步轻松掌握SEO技巧,助你实现网站流量稳定增长
  • 这次终于选对! 千笔·降AI率助手,本科生降重首选
  • 2026必备!8个AI论文工具测评:继续教育毕业论文写作全攻略
  • 写作压力小了!8个AI论文网站深度测评,专科生毕业论文+开题报告全攻略
  • 2月16日
  • 交稿前一晚!千笔·降AI率助手,MBA论文降重神器
  • 话费卡回收方式推荐:流程简单又可靠! - 团团收购物卡回收
  • 程序员的未来:在AI时代重新定义技术价值
  • 再见 Electron!Electrobun 重磅发布!
  • Declaration of interests-模板
  • mPLUG视觉问答优化指南:提升图片分析速度的技巧
  • Python基于Vue的精品民宿管理系统的设计与实现 django flask pycharm
  • 搞Docker必懂的容器 8个核心操作,6大高频坑,3个核心逻辑,新手也能零失误
  • Thinkphp和Laravel框架基于协同过滤算法的的儿童图书推荐系统
  • Python基于Vue的学生宿舍管理系统的设计于实现 django flask pycharm
  • 话费卡回收新攻略:线上线下回收优势对比 - 团团收购物卡回收
  • 5分钟上手:LongCat-Image-Edit V2图片编辑实战
  • Python基于Vue的在线医疗预约系统设计与实现 django flask pycharm
  • 工业机器视觉之引导定位软件(WPF+Halcon+海康相机)
  • Rust所有权模型:编程语言中的“安全第一”哲学,如何从根源上杜绝类型混淆
  • DeepSeek-OCR-2实操手册:识别日志监控+Prometheus指标接入实践