首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

LeetCode155:最小栈,最简单的中等难度题,时间击败100%,内存也低于官方

本篇概览 最近运气不错,在LeetCode上白捡一道送分题,官方设定的难度是中等,然而此题难度放在简单的题库中都是垫底的存在,对于刷题数太少的欣宸而言,这简直就是力扣的馈赠,建议大家也不要错过,花上几分钟将其拿下...-3. minStack.pop(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2....提示 -231 <= val <= 231 - 1 pop、top 和 getMin 操作总是在 非空栈 上调用 push, pop, top, and getMin最多被调用 30000 次 官方解法...最小值问题:本题不仅要有基本的栈功能,还要时刻能返回栈内的最小值 内存怎么优化? 耗时怎么优化?...+1的位置即可 最小值问题 题目要求中规定了getMin方法要返回当前栈内的最小值,所以我们要搞清楚什么时候最小值会发生变化: 栈内增加元素时,可能新增的元素比栈内元素都小 栈内弹出元素时,可能弹出的元素是最小的那个

40020
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python干货——se集合

    返回值是一个新的set集合# Python中的set集合,无序不重复的集合# difference()获取两个集合的差集。...保留两个集合中的相同的元素# Python中的set集合,无序不重复的集合# difference()获取两个集合的并集。...从set集合中获取元素,返回值是这个获取的元素。...移除set集合中指定的元素,没有返回值# Python中的set集合,无序不重复的集合# discard() : 移除set集合后中指定的元素charSet1: set = {'小明', 20, True...(无返回值)# Python中的set集合,无序不重复的集合# update() : 存在两个集合,会把第二个set集合中的元素添加到指定的集合中# 如果存在重复元素,就会删除,因为set集合中不可以存储重复的元素

    52820

    单调队列问题-LeetCode 239、169(单调队列,Boyer-Moore投票法)

    单调队列:LeetCode #239 169 1 编程题 【LeetCode #239】滑动窗口的最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。...你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回滑动窗口中的最大值。...对于单调队列(实质为单调递减队列)来说,其最大值总是在队列的队首,虽然在push函数中存在有while循环,但是总体来说,单调队列还是可以实现O(N)的复杂度的。...接着压入操作数n,这样一来就保证了最大值在队列首部,且队列为递减队列! 在pop函数中,如果队首与操作数相同,则删除堆头,否则不用删除了!因为有可能在push阶段已经删除掉了!...示例 1: 输入: [3,2,3] 输出: 3 解题思路: 由于题目说众数为个数大于n/2的数,因此: 第一个思路十分简单,将整个数组排序后,众数那个数一定在数组的中间位置,直接返回就好了!

    1.4K20

    LeetCode-155-最小栈

    pop() —— 删除栈顶的元素。 top() —— 获取栈顶元素。 getMin() —— 检索栈中的最小元素。...-3. minStack.pop(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2....提示: pop、top 和 getMin 操作总是在 非空栈 上调用。 如果两个链表没有交点,返回 null. 在返回结果后,两个链表仍须保持原有的结构。 可假定整个链表结构中没有循环。...# 解题思路 方法1、两个栈: 需要一个数据栈,一个最小栈 最小栈始终存储当前的最小值 在push进数据栈的同时,判断最小栈是否为空或者新值是否小于最小栈的顶部值, 如果小于则加入新值到最小栈,如果不小于则加入最小栈栈顶...(即上一个最小元素)入最小栈 当需要pop的时候,同时弹出最小栈和数据栈数值 当需要getMin时,返回最小栈的栈顶元素即是当前最小元素 当需要拿到top时,返回数据栈栈顶元素 # Java代码 class

    21820

    2019年Java面试题基础系列228道(5),快看看哪些你还不会?

    24、a = a + b 与 a += b 的区别 25、我能在不进行强制转换的情况下将一个 double 值赋值给 long类型的变量吗? 26、3*0.1 == 0.3 将会返回什么?...int 类型赋值给 byte就会编译出错) 25、我能在不进行强制转换的情况下将一个 double 值赋值给long 类型的变量吗?...意思就是说,在32位和64位的java虚拟机中,int 类型的长度是相同的。 32、Serial 与 Parallel GC 之间的不同之处?...33、32 位和 64 位的 JVM,int 类型变量的长度是多数? 32 位和 64 位的 JVM 中,int 类型变量的长度是相同的,都是 32 位或者 4个字节。...实际上这些变量在编译时会被替换掉,因为编译器知道这些变量的值,并且知道这些变量在运行时不能改变。

    61020

    Leetcode No.155 最小栈

    一、题目描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 push(x) —— 将元素 x 推入栈中。 pop() —— 删除栈顶的元素。...minStack.pop(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2....提示: pop、top 和 getMin 操作总是在 非空栈 上调用。 二、解题思路 要做出这道题目,首先要理解栈结构先进后出的性质。...在这之后无论何时,如果栈顶元素是 a,我们就可以直接返回存储的最小值 m。 按照上面的思路,我们只需要设计一个数据结构,使得每个元素 a 与其相应的最小值 m 时刻保持一一对应。...当一个元素要入栈时,我们取当前辅助栈的栈顶存储的最小值,与当前元素比较得出最小值,将这个最小值插入辅助栈中; 当一个元素要出栈时,我们把辅助栈的栈顶元素也一并弹出; 在任意一个时刻,栈内元素的最小值就存储在辅助栈的栈顶元素中

    27830

    数据结构(一)

    解法一 最直接的方法就是用两个栈,一个去保存正常出入栈的值,一个去保存最小值(实际上是用栈顶去保存最小值) 元素同时入两个栈 第二个元素来了,二话不说先入第一个栈,再和第二个栈的栈顶元素比较,如果小于等于他就入栈...() { int pop = stack.pop(); int top = minStack.peek(); //等于的时候再出栈 if...stack.push(x); } public void pop() { //如果弹出的值是最小值,那么将下一个元素更新为最小值 if...注意: 如果字符串的长度为奇数,直接返回false 最后栈应该是空的 设想一种解决方案: 初始化栈; 依次处理表达式里的每个括号; 如果遇到开括号,我们只需要把它推到栈上; 如果遇到一个闭括号,在处理他之前先检查它是否与目前的栈顶元素匹配...'#' : stack.pop(); //如果返回的值和它不匹配,直接返回 if (top !

    50010

    栈的实现与OJ括号匹配

    前言 人总是在坍塌中重建, 有些东西必须摧毁, 才能迎来新生, 不管是那些消耗你的人, 还是令你感到焦虑的事情, 还是一份你觉得毫无意义并且又不喜欢的工作, 又或者是那个内心敏感的自己, 总之你害怕什么...栈的实现 栈的实现一般可以使用数组或者链表进行实现, 相对而言数组的结构实现更优一些, 因为在数组上尾插数据的代价比较小, 而且数组的缓存利用率比较高....初始化 void InitStack(ST* pst) { assert(pst); pst->a = NULL; pst->capacity = pst->top = 0; } 注意 top的值根据自己的情况定义...OJ括号匹配 题目链接: 有效的括号 题目描述: 题目分析: 首先题目有三个要求 左括号必须用相同类型的右括号进行闭合....左括号必须以正确的顺序闭合 每个左括号都有一个对应相同类型的左括号 如果我们直接用左括号个数与右括号进行比较的话, 那么顺序问题我们无法解决, 而栈这种后进先出的结构恰好可以解决这种问题, 当遇到左括号时进行压栈

    7410

    java基础第十三篇之Collection

    和 所有旧元素是否相同,如果不相同那么不重复,存储 * * 2.如果哈希值相同了,调用equals方法,拿新元素和哈希值相同的那个旧元素,返回值true,那么判断重复元素,不存储 *...* 对象的哈希值: * 实际上java中所有的对象 都有一个字符串表示:toString(),默认:包名.类名@哈希值 * 实际上java中所有的对象 都有一个数字的表示...地址值肯定不一样,但是哈希值有可能一样吗?...hashCode() { // //我们目的,让年龄相同并且名字相同的对象返回的哈希值也相同 // return this.age * 31 + this.name.hashCode...方法重写:字符类出现了一摸一样的方法(注意:返回值类型可以是子父类) Override和Overload的区别?Overload能改变返回值类型吗?

    55310

    哈希表-LeetCode 217、219、220、232(hashset、hashmap)

    如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。...,nums[i]为key, i为vlaue, 遍历数组,并查询哈希表,如果存在,即两数相同,则判断索引之间差值是否小于等于K, 如果是返回true,否则更新nums[i]所对应的索引,用于下一次的比较!...,也就是说在set中找到满足这个式子的i, j就可以返回true了!...在STL库中,low_bound(type t)表示返回一个大于等于t的值,如果找不到就返回end() 因此在程序中,首先找到low_bound(nums[i]-t),然后判断其是不是小于等于nums[...pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。

    50520

    有效的括号

    void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int getMin() 获取堆栈中的最小元素。...提示: -2^31 <= val <= 2^31 - 1 pop、top 和 getMin 操作总是在 「非空栈」 上调用 push, pop, top, and getMin最多被调用 3 * 10^...当执行入栈操作时,将val和原本的最小值进行比较,较小值便是最新的最小值。当执行出栈操作时,依旧需要实时更新最小值,方法是将栈里剩余的元素展开,比较出最小值。...通过实时维护最小值,便可以在常数时间内获取到当前栈的最小值。...有效的括号 力扣题目链接[2] 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。

    16960

    分享 Java 常见面试题及答案(上)

    String接收bytes的构造器转成String,再Long.parseLong 20)我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?...a、b 提升为 int 类型,所以将 int 类型赋值给 byte 就会编译出错) 25)我能在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量吗?...Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32 位 和 64 位 的Java 虚拟机中,int 类型的长度是相同的。...相等 hashcode 值的规定只是说如果两个对象相等,必须有相同的hashcode 值,但是没有关于不相等对象的任何规定。 62)两个相同的对象会有不同的的 hash code 吗?...不能,根据 hash code 的规定,这是不可能的。 63)我们可以在 hashcode() 中使用随机数字吗?(答案) 不行,因为对象的 hashcode 值必须是相同的。

    75820

    队列的最大值(deque模拟单调栈)

    题目 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的时间复杂度都是O(1)。...若队列为空,pop_front 和 max_value 需要返回 -1 示例 1: 输入: ["MaxQueue","push_back","push_back","max_value", "pop_front...max_value"] [[],[],[]] 输出: [null,-1,-1] 限制: 1 pop_front,max_value的总操作数 <= 10000 1 <= value...解题 一个队列正常存储队列数据 一个双端队列存储最大值,当push进一个值 v 时,前面比 v 小的全部pop掉,保持 deque 内单调递减 出队时,检查队列首位和最大值首位相同吗?...相同最大值队列也需要出队 class MaxQueue { int v; queueint> q; dequeint> Maxlist; public: MaxQueue() {

    30210
    领券