博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer-包含min函数的栈
阅读量:6348 次
发布时间:2019-06-22

本文共 1063 字,大约阅读时间需要 3 分钟。

包含min函数的栈

一、题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

二、算法思想

首先拿到这题,我们一上来想到的可否用一个中间变量来存放最小值,这种在对于入栈时最小值的更新是可以起到作用的,但是出栈时如果包含该最小值的变量弹出了,最小值就无法实现更新了。

所以接下来我们用一个辅助栈来实现最小值的更新工作。
这个辅助栈工作原理:
入栈时,1)当数据栈为空时,进入栈的元素同时也进入辅助栈;2)当它不为空时,就把该入栈元素与辅助栈的栈顶元素进行比较,若入栈元素小,则该元素同时也进入辅助栈;若不是,则对辅助栈不进行操作
出栈时,1)当辅助栈的栈顶元素等于处理数据的数据栈栈顶元素时,不仅数据栈要弹出元素,辅助栈也要弹出栈顶元素,2)当辅助栈的栈顶元素不等于处理数据的数据栈栈顶元素时,只对数据栈进行出栈操作。
这样我们思路就很明确了:min函数只需返回辅助栈的栈顶元素。

三、算法实现

3.1、C++实现

class Solution {public:    void push(int value) {        datestack.push(value);        if(minstack.empty())              minstack.push(value);          else if(value<=minstack.top())              minstack.push(value);      }    void pop() {        if(datestack.empty())            return;        if(minstack.top() == datestack.top())            minstack.pop();        datestack.pop();    }    int top() {        return datestack.top();    }    int min() {        return minstack.top();    }private:    stack
datestack; stack
minstack;};

转载于:https://www.cnblogs.com/MarkKobs-blog/p/10425556.html

你可能感兴趣的文章
怎么把Maven项目转为动态Web项目?
查看>>
Arm发布Cortex-A76AE自动驾驶芯片架构,宣示车载系统市场主权
查看>>
FreeBSD ports中make可带有的参数(转)
查看>>
Hibernate入门教程
查看>>
Java支付宝扫码支付[新]
查看>>
SpringMVC 拦截器 筛选
查看>>
CronExpression介绍
查看>>
第十八章:MVVM(八)
查看>>
点击表头切换升降序排序方式
查看>>
第26天,Django之include本质
查看>>
Java中静态变量和实例变量的区别
查看>>
秋名山老司机(详解)——bugku
查看>>
RED | Robot Framework集成开发环境
查看>>
育碧同 Mozilla 联手开发 AI 代码助手
查看>>
【实用】面对枯燥的源码,如何才能看得下去?
查看>>
智库说 | 徐远:数字时代的城市潜力
查看>>
《JSP极简教程》jsp c:forEach用法
查看>>
WebSocket详解(六):刨根问底WebSocket与Socket的关系
查看>>
用 Go 写一个轻量级的 ssh 批量操作工具
查看>>
网站设计之合理架构CSS 架构CSS
查看>>