剑指 Offer 30. 包含min函数的栈C++(详解)

简介: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 0.minStack.min(); --> 返回 -2.方法设置俩个栈,一个数据栈存放数据元素

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。

示例:


MinStack minStack = new MinStack();

minStack.push(-2);

minStack.push(0);

minStack.push(-3);

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

minStack.pop();

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

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


方法


设置俩个栈,一个数据栈存放数据元素,另一个最小值栈,把最小的值放进去,


1、如果栈为空,直接x同时放入最小值栈和数据栈,


2 、将要放进去的元素与最小值栈的栈顶元素进行比较,如果不满足小于最小值的栈顶,仍然放的是之前的最小值栈的栈顶元素,如果小于则把这个元素放到最小值栈上去


注意(代码的实现方式比较巧妙,如果插入的x大于最小值栈的栈顶元素,那么把此时最小值栈的栈顶元素赋值给x,最终统一的把x放进去就行)

image.png

实现代码

class MinStack {
public:
    stack<int>_date; 
    stack<int>_min;
    /** initialize your data structure here. */
    MinStack() {
    }
    void push(int x) {
        _date.push(x);   //将数据压入数据栈
        if(_min.empty())   _min.push(x);   //数据栈为空的时候直接插入
        else{
            if(x > _min.top())             //如果x大于最小栈的栈顶
               x = _min.top();
            _min.push(x);       //将x push进最小的栈
        }
    }
    void pop() {              //数据栈与最小栈同时弹出
        _date.pop();
        _min.pop();
    }
    int top() {
        return _date.top();
    }
    int min() {
        return _min.top();
    }
};


相关文章
|
1天前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
13 3
|
1天前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
8 1
|
1天前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
10 1
|
1天前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
12 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
16天前
|
编译器 C++
【C++核心】函数的应用和提高详解
这篇文章详细讲解了C++函数的定义、调用、值传递、常见样式、声明、分文件编写以及函数提高的内容,包括函数默认参数、占位参数、重载等高级用法。
17 3
|
2天前
|
算法 C++
|
2天前
|
算法 C++
【算法单调栈】 矩形牛棚(C/C++)
【算法单调栈】 矩形牛棚(C/C++)
|
2月前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
20 1
|
2月前
|
C++
c++常见函数及技巧
C++编程中的一些常见函数和技巧,包括生成随机数的方法、制表技巧、获取数字的个位、十位、百位数的方法、字符串命名技巧、避免代码修改错误的技巧、暂停和等待用户信号的技巧、清屏命令、以及避免编译错误和逻辑错误的建议。
21 6
|
2月前
|
存储 C++
c++学习笔记05 函数
C++函数使用的详细学习笔记05,包括函数的基本格式、值传递、函数声明、以及如何在不同文件中组织函数代码的示例和技巧。
30 0
c++学习笔记05 函数