码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Leetcode P456 Java使用单调栈来解决


    Leetcode P456 Java使用单调栈来解决

    执行用时:21 ms, 在所有 Java 提交中击败了40.96%的用户

    内存消耗:59.7 MB, 在所有 Java 提交中击败了82.52%的用户

    ideas

    ​ 创建一个数组,用来记录从i到num.length()中最小的数,接下来在创建一个栈从后往前遍历数组,这个栈找到大于min[i]且小于nums[i]的元素。

    ​ 首先判断下数组长度是否小于3,如果小于是false

            if (nums.length < 3){
                return false;
            }
    
    • 1
    • 2
    • 3

    ​ 创建一个数组用来记录i到num.length中最小的数,这么做的原因就是保证我们132中的其中1要保证是最小的值

    //用来维护第一个数字是最小的
    int[] minarr = new int[nums.length];
    minarr[0] = nums[0];
    
    for (int i = 1; i < nums.length; i++) {
        minarr[i] = Math.min(minarr[i-1],nums[i]);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    接下来创建一个栈用,然后从后往前遍历去找到大于min[i]且小于nums[i]的元素。

           Stack<Integer> stack = new Stack<>();
            for (int i = nums.length-1; i >= 0 ; i--) {
         			......
            }
    
    • 1
    • 2
    • 3
    • 4

    在循环期间一定要先筛选出num[i] > min[i]的元素,因为只有满足这个条件才能是我们想要的元素

            for (int i = nums.length-1; i >= 0 ; i--) {
                if (nums[i] > minarr[i]){
    							 ...
                }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果满足了这个条件,如果我们的栈不为NULL,但是我们栈中的元素小于等于minarr[i]的元素,然后直接把把栈中的元素抛出,这么做就是为了保证找出132 其中的2

                    //把栈里小于当前下标的最小值的全部移除
                    while (!stack.isEmpty() && stack.peek() <= minarr[i]){
                        stack.pop();
                    }
    
    • 1
    • 2
    • 3
    • 4

    接下来判断我们栈中的peek()是否小于nums[i],如果小于那么我们就找到了大于min[i]且小于nums[i]的元素

    if (!stack.isEmpty() && stack.peek() <nums[i]){
        return true;
    }
    
    • 1
    • 2
    • 3

    如果if不合法,那么就证明,当前这个元素可能是我们想要的132中的3,所以我们把当前这个元素添加到stack中,在后续的判断是否满足132.

    stack.push(nums[i]);
    
    • 1

    如果以上循环没有找到我们要的元素,那么直接返回false

  • 相关阅读:
    聚乙二醇/聚吡咯/多聚赖氨酸(PLL)/聚合物-聚乙烯亚胺(PEI)包裹四氧化三铁磁性纳米颗粒
    基础篇——基础项目解析
    让人头痛的事务问题到底要如何解决? (荣耀典藏版)
    ARM32开发——GPIO输入
    鲸鱼优化算法改进风储机组一次调频出力分配系数,以频率偏差最小为目标优化函数,结合鲸鱼算法WOA捕食过程,改进风储出力分配系数simulink与matlab联合
    Fiora一款二次元的Web多人在线网络聊天系统
    Python垃圾回收
    异常是怎么被处理的?这题的答案不在源码里面。
    水果店圈子:水果店坏水果应该怎么处理,水果店卖剩下的水果如何处理
    SQL Server教程 - SQL Server 复制(Replication)
  • 原文地址:https://blog.csdn.net/qq_40102411/article/details/126586620
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号