leetcode-包含min函数的栈-93

35 篇文章 3 订阅
25 篇文章 0 订阅
本文介绍了如何通过设计两个栈s1和s2来实现一个数据结构,其中s1存储正常数据,s2存储s1中的最小值。push、pop和min函数利用这两个栈的特性,确保了在操作过程中能快速获取和维护最小值。
摘要由CSDN通过智能技术生成

题目要求
在这里插入图片描述
题目思路
1.设计上两个栈,第一个栈s1里面正常存储插入进来的数据,s2里面只存储s1里面最小的那个数据。
2.对于push函数,所有新来的value都需要在s1中插入,s2中,如果s2为空,那么也直接插入,因为这个值就是最小值,如果s2已经有元素,那么拿s1中最小的同新的value比较,如果value小则在s2中也插入一个value,如果原本s1中的最小值小,那么就把s2.top()在插入一份,这个的原因是为了方便实现pop(),如果s1中需要删除,那么s2也直接删除就,因为s1和s2中的元素个数一样多,这样当s1把最小值删除的时候,s2会也删除掉。
3.pop函数,s1和s2正常删除
4.min函数的返回值等于s1的底部,等于s2的top(),因为s1的底部不好取,所以才创建的s2用于记录。

代码实现

class Solution {
public:
    stack<int> s1;
    stack<int> s2;
    void push(int value) {
        s1.push(value);

        if(s2.empty() || s2.top() > value)
            s2.push(value);
        else
            s2.push(s2.top());
    }
    void pop() {
        s1.pop();
        s2.pop();
    }
    int top() {
        return s1.top();
    }
    int min() {
        return s2.top();
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天津 唐秙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值