首页 > 其他分享 >包含min函数的栈

包含min函数的栈

时间:2023-07-25 12:23:01浏览次数:36  
标签:minStack 函数 包含 min top 元素 stackMin push MinStack

title: 包含min函数的栈
date: 2023-07-25 11:50:19
tags:
- c/c++
categories:
- 算法
- 笔试
top:

包含min函数的栈

题目来自acwing

题目(点击跳转)

设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。

  • push(x)–将元素x插入栈中
  • pop()–移除栈顶元素
  • top()–得到栈顶元素
  • getMin()–得到栈中最小元素

数据范围

操作命令总数 [0,100]。

样例

MinStack minStack = new MinStack();
minStack.push(-1);
minStack.push(3);
minStack.push(-4);
minStack.getMin();   --> Returns -4.
minStack.pop();
minStack.top();      --> Returns 3.
minStack.getMin();   --> Returns -1.

思路:

题目要求实现一个随时可以获取所有元素中最小值的栈,这里需要维护一个单调栈

  • 也就是当对栈进行压栈操作时,判断一下单调栈是否为空或者单调栈栈顶元素是否大于要压入的元素,如果满足则将该元素也同步压入单调栈中,当要去最小值时直接将单调栈的栈顶元素取出即可。
  • 当进行弹出栈顶元素时,判断一下栈顶元素是否与单调栈栈顶元素相同,如果相同那么代表栈中该元素弹出,两个栈中都弹出。

代码:

class MinStack {
public:
    /** initialize your data structure here. */
    stack<int> stackValue;
    stack<int> stackMin;
    MinStack() {
        
    }
    
    void push(int x) {
        stackValue.push(x);
        if(stackMin.empty() || stackMin.top() >= x)
            stackMin.push(x);
    }
    
    void pop() {
        if(stackValue.top() == stackMin.top())
            stackMin.pop();
        stackValue.pop();
    }
    
    int top() {
        return stackValue.top();
    }
    
    int getMin() {
        return stackMin.top();
    }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

标签:minStack,函数,包含,min,top,元素,stackMin,push,MinStack
From: https://www.cnblogs.com/hhhhuaz/p/17579578.html

相关文章

  • OSql命令操作函数(可用于安装程序的时候数据库脚本执行)
    ///<summary>///OSql命令操作函数(可用于安装程序的时候数据库脚本执行)///</summary>publicclassSqlScriptHelper{#regionOSql操作函数///<summary>///本地执行SQL脚本///</summary>///<paramname=......
  • 学习CALCULATE函数(二)修订版
    之前呢,白茶分享了一些CALCULATE的心得,但是要知道我们在对数据进行分析的时候,往往是多条件参考的,比如说哪个区域、哪个时间点、哪个状态的销售的最好,这就很明显需要我们在计算的时候把这些选项算进去。在纸上计算很容易,但是DAX中如何进行呢?来,看下面的例子:这是我们在上一期使用的示例......
  • 函数周期表丨时间丨表丨CALENDAR
    CALENDAR函数语法=CALENDAR(<开始日期>,<结束日期>)CALENDAR函数,属于常用的**“表函数”**之一,一般用于生成日期维度。也可以用来构建虚拟的日期表进行计算。参数第一参数:开始日期。第二参数:结束日期。返回结果一个具有单个“日期列”表,这个日期列包含开始与结束日期。并且是连续......
  • 函数周期表丨时间丨值丨DATE
    DATE函数语法=DATE(<年>,<月>,<日>)DATE函数,属于“值函数”之一,返回某个具体的日期。用的频率不是特别的高,一般用来限定时间使用,比如说从哪一天开始,或者哪一天结束。参数第一参数:年。通常情况下,年份这一项一般情况都是需要输入四位数,并且日期要大于1900年3月1日以后的日期。如果......
  • 学习CALCULATE函数(一)修订版
    有位大佬曾经告诉过我,如果你深入理解了CALCULATE,那么你就相当于理解了DAX函数的基础,因为它是DAX函数中最灵活多变,也是适应性最强的函数之一。CALCULATE的语法结构DAX=CALCULATE(<expression>,<filter1>,<filter2>...)第一参数是计算的表达式,可以进行各种聚合运算从第二参开始,是一......
  • min25筛
    时间复杂度为解决的问题有:用来求积性函数前缀和,要求有是一个关于质数p的项数较小的多项式或者能快速求值可以快速求值前置知识:积性函数:对于互质的整数和有性质完全积性函数:对于任意整数和有性质规定是从小到大第零个质数,是从小到大第一个质数在以内没有任何一个合数的最小质因子......
  • openpyxl模块-------------------------------函数公式应用
    求和代码:#!/usr/bin/envpythonfromopenpyxlimportWorkbookbook=Workbook()sheet=book.activerows=((34,26),(88,36),(24,29),(15,22),(56,13),(76,18))forrowinrows:sheet.append(row)cell=sheet.cell(row=7,column=2)cell.va......
  • PHP输出函数不同之处
    输出打印函数:echo、print、print_r()、printf()、sprintf()、var_dump()、var_export()1)echo、print相同:都不是函数,而是语言结构。可以不用括号无法输出数组不同:echo接受多个参数;print仅接受一个返回值echo没有返回值;print始终返回12)printf()、sprint......
  • 函数周期表丨时间智能丨表丨DATESBETWEEN
    DATESBETWEEN函数DATESBETWEEN函数隶属于“时间智能函数”,属于“表”函数。可以用作生成固定范围的日期,也可以用来作为限定条件来对聚合计算进行限制。在业务需求中,有时候需要将数据与上一阶段的数据进行对比,注意,这里说的是一个阶段,不是一个点;还有一种情况是需要用一段时间的数据作......
  • 函数周期表丨时间智能丨表丨NEXT系列(修订)
    NEXT系列函数NEXT系列一共包含四个函数:NEXTDAY函数,NEXTMONTH函数,NEXTQUARTER函数,NEXTYEAR函数。分别代表次日、次月、次季度、次年。隶属于“表函数”。无论是语法还是用途方面都是比较类似的,统一打包处理!用途1:生成日期表。初始为次日/次月/次季度/次年。用途2:计算相对应范围的数据......