代码随想录LeetCode | 单调栈问题

news2024/9/20 22:37:14

前沿:撰写博客的目的是为了再刷时回顾进一步完善,其次才是以教为学,所以如果有些博客写的较简陋,是为了保持进度不得已而为之,还请大家多多见谅。

预:看到题目后的思路和实现的代码。

见:参考答案展示。

感思:对比答案后的思考,与之前做过的题目是否有关联。

行:

(1)对于没做出来的题目,阅读答案后重新做一遍;

(2)下次做题可以尝试改善的方向;

(3)有助于理解的相关的题目

优先级:做题进度>学习&总结>默写回顾>做题数量

题目回顾

1.739. 每日温度

题目链接:739. 每日温度

思路

二刷:有使用单调栈的思路,但实现时发现小于等于时不会比较,若一个个比较排序则很低效。

  • 当时想错了,小于等于时直接放进去即可,这样放进去肯定是栈顶到栈底从小到大的顺序。

因为是只需要获取大于当前元素的下一个下标与当前下标的位置差,所以栈只需存储下标值。

当前遍历到的值>栈顶下标对应值时,则表示栈顶下标对应值遇到了比它大的下一个最大值。

  • 此时将通过临时变量i存储栈顶下标。
    • j-i+1:表示比它大的下一个最大值位置差。
  • 并且要考虑栈内其他元素是否小于当前遍历到的值,所以要使用while循环比较。
    • 要注意给i传送新的栈顶下标值,才能更新比较变量。

而小于等于的情况,上面提到了,只需要直接放进去即可。

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        // 寻找下一个大于值
        Deque<Integer> deque = new LinkedList();
        int len = temperatures.length;
        int[] result = new int[len];
        deque.push(0);
        for(int j = 1;j < len;j++){
            int i = deque.peek();
            //System.out.println(i);
            while(!deque.isEmpty() && temperatures[i] < temperatures[j]){
                deque.pop();
                result[i] = j-i;
                if(!deque.isEmpty()){
                   i = deque.peek();
                }else{
                    deque.push(j);
                    break;
                }
            }
            if(temperatures[i] >= temperatures[j]){
                deque.push(j);              
            }
        }
        return result;
    }
}

2.496. 下一个更大元素 I

题目链接:496. 下一个更大元素 I

思路

数组内无重复→哈西搜索勉强实现

相等于从739. 每日温度单个数组比较变成两个数组,但本质相同,直接遍历比较父集

出现更大的值时,则通过哈希搜索子集对应的数组位置,将该更大值赋值给子集对应的数组位置。

class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        //找到nums2与nums1匹配的元素,其次计算在nums2右边比它大的值,并且nums1是nums2的子集。
        Map<Integer,Integer> map = new HashMap<>();
        int len1 = nums1.length;
        int len2 = nums2.length;
        for(int i = 0;i < len1;i++){
            map.put(nums1[i],i);
        }
        int[] result = new int[len1];
        Arrays.fill(result,-1);
        Deque<Integer> deque = new LinkedList();
        deque.push(nums2[0]);
        for(int i = 1;i < len2;i++){
            int value = deque.peek();
            while(!deque.isEmpty() && value < nums2[i]){
                if(map.containsKey(value)){
                    result[map.get(value)] = nums2[i];
                }
                deque.pop();
                if(!deque.isEmpty()){
                    value = deque.peek();
                }
            }
            deque.push(nums2[i]);
        }
        return result;
    }
}

3.503. 下一个更大元素 II

题目链接:503. 下一个更大元素 II

4. 42. 接雨水

题目链接:42. 接雨水

5.84. 柱状图中最大的矩形

题目链接:84. 柱状图中最大的矩形

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/343693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

两种特征提取方法与深度学习方法对比的小型金属物体分类分析研究

本文讨论了用于对包括螺丝、螺母、钥匙和硬币在内的小型金属物体进行分类的两种特征提取方法的效率&#xff1a;定向梯度直方图 (HOG) 和局部二进制模式 (LBP)。首先提取标记图像的所需特征并以特征矩阵的形式保存。使用三种不同的分类方法&#xff08;非参数 K 最近邻算法、支…

云计算|OpenStack|社区版OpenStack(实务操作---cloud-init的使用)

前言&#xff1a; 接上一篇文章&#xff1a;https://zskjohn.blog.csdn.net/article/details/128931042 我们可以从官方获取到现成的镜像&#xff0c;例如&#xff0c;从Ubuntu 18.04 LTS (Bionic Beaver) Daily Build [20230210]官方下载的bionic-server-cloudimg-amd64.img…

春招Leetcode刷题日记-D2-贪心算法-区间问题

D2-贪心算法-区间问题力扣435. 无重叠区间思路代码力扣435. 无重叠区间 题目链接&#xff1a;435. 无重叠区间 思路 1、贪心策略&#xff1a; 1、题目中&#xff0c;给了若干个区间&#xff0c;现在&#xff0c;我想留下尽可能多的&#xff0c;不重叠的区间 2、考虑&#…

Git配置多仓库账户密码

前言说明&#xff1a; 由于我们在工作中可能会遇到公司是用的gitlab仓库&#xff0c;代码下载需要github仓库&#xff0c;自己的项目需要gitee仓库&#xff0c;如何在同一台电电脑配置多个仓库账户密码就尤为重要。 (一) 配置流程 这里是在windows电脑上配置多仓库以github为例…

使用Spring框架的好处是什么

使用Spring框架的好处是什么&#xff1f; 1、轻量&#xff1a;Spring 是轻量的&#xff0c;基本的版本大约2MB。 2、控制反转&#xff1a;Spring通过控制反转实现了松散耦合&#xff0c;对象们给出它们的依赖&#xff0c;而不是创建或查找依赖的对象们。 3、面向切面的编程(AOP…

JCIM|Chemistry42:一个人工智能驱动的分子设计和优化平台

题目&#xff1a;Chemistry42: An AI-Driven Platform for Molecular Design and Optimization 文献来源&#xff1a;https://doi.org/10.1021/acs.jcim.2c01191 代码&#xff1a;https://insilico.com/pipeline (平台网址) 1.背景介绍 Chemistry42是Insilico Medicine提出…

Git_合并多次提交记录

Git_合并多次提交记录 前言&#xff1a;使用git rebase将多条提交记录合并成一条 应用场景&#xff1a;公司代码分支在master上&#xff0c;张三接到一个开发任务&#xff0c;需要在master上开发一个新功能&#xff0c;首先张三不能直接使用master分支进行开发&#xff0c;因为…

论文阅读:GeoAug: Data Augmentation for Few-Shot NeRF with Geometry Constrain

中文标题&#xff1a;使用几何约束增强小样本神经辐射场 提出的问题 NeRF尽管简介有效&#xff0c;但是往往不能收敛到正确的几何结构。这个问题在小样本学习中尤为明显&#xff0c;往往在没有足够训练数据的情况下&#xff0c;很难使得MLP网络学习到正确的几何的隐表示&#…

Solon Java Framework 2.1.2 发布。简单!高效!国产!

Solon 是一个高效的 Java 应用开发框架&#xff1a;更快、更小、更简单。它不是 Spring&#xff0c;没有用 Servlet&#xff0c;也无关 JavaEE&#xff1b;它也是一个新兴独立的开放生态。主框架仅 0.1 MB。 150来个生态插件&#xff0c;覆盖各种不同的应用开发场景&#xff1…

Linux Capabilities 入门

目录 Linux capabilities 是什么&#xff1f; capabilities 的赋予和继承 线程的 capabilities Permitted Effective Inheritable Bounding Ambient 文件的 capabilities Permitted Inheritable Effective 运行 execve() 后 capabilities 的变化 案例 Linux capab…

黑马】后台管理183-

一、添加时间线组件时间线组件在element2.6.0的版本中才可以找到项目中用到的插件早于时间线插件发布的&#xff0c;所以需要用到素材中的&#xff0c;timeline 和timeline-item复制到\code\shop-hou\src\plugins\1,在element.js中导入timeline等组件import Timeline from ./ti…

20230213在AIO-3568J开发板在原厂Android12下跑通ap6275s

20230213在AIO-3568J开发板在原厂Android12下跑通ap6275s 2023/2/13 8:59 一、从AIO-3568的Android11的kernel中抠出来AP6275S的驱动&#xff1a; 1、 Z:\android12-rk3588-new\kernel-4.19\arch\arm64\configs\rockchip_defconfig # CONFIG_WLAN_VENDOR_QUANTENNA is not set …

电路中的过压(OVP)过流(OCP)保护电路

电路中的过压(OVP)过流(OCP)保护电路 我们在学习电路设计的过程中,总会发现电路在过压或者过流时遭到不可逆的损坏, 下面分享几例过压过流保护电路, 希望对朋友们有所帮助, 个人能力有限, 如有不当之处还请多多指教: 例 1&#xff1a;OVP(过压保护) 1).当VCC_IN小于28V时&…

spring(三)-----------什么是beanDefinition?

上篇我们以mybatis如何注入mapper对象为引&#xff0c;发现mybatis使用了FactoryBean&#xff08;动态代理&#xff09;动态注册beanDefinition 的方式实现了对多个bean进行注入。 这篇我们延续上篇的问题&#xff0c;什么是beanDefinition&#xff1f;动态注入beanDefinition…

yum安装

仓库安装[rootlocalhost ~]# rpm -ivh https://repo.mysql.com//mysql80-community-release-el9-1.noarch.rpm[roothezhihao ~]# dnf install mysql-server -y本地安装wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.32-1.el9.x86_64.rpm-bundle.tartar xvf mysql…

STK + C# + Cesium联合编程(二):CZML文件生成及加载

概述本文续上一篇博文&#xff0c;上一篇文章中验证了C# .NET Framework (Web Service) STK Cesium前端显示的相关技术&#xff0c;本篇通过STK安装附带的Pro Tutorial实例以及Export CZML插件演示如何创建STK场景&#xff0c;创建对象&#xff0c;计算Access&#xff0c;并通…

【软件测试】8年测试老兵的突破之路,一路升级打怪......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 目前几乎所有的大厂…

网络基础-基础网络命令

文章目录路由命令查询添加路由1.添加访问某台主机的静态路由2.添加访问某个网络的静态路由3.添加默认网关&#xff1a;删除设计关键字路由2参考路由 命令查询 通过 route --help 或man route 查询 添加路由 1.添加访问某台主机的静态路由 route add -host [目标主机IP地址…

为什么优秀的人总能拥有开挂的人生

时间不会辜负一个自信之人。坚持不懈的努力&#xff0c;如果好的回报尚未到来&#xff0c;那一定是时间还不够长&#xff0c;努力还不够多。 来自尚学堂毕业学生的感悟 我从未接触过编程&#xff0c;来到北京尚学堂学Java的&#xff0c;学习难度自然要比计算机专业的同学大很多…

OpenHarmony使用Socket实现一个UDP客户端详解

一、前言 我们在这里介绍Socket的使用,是为了后面的一篇文章实现设备配网做铺垫。 二、示例详解 点击获取BearPi-HM_Nano源码 ,以D3_iot_udp_client为例: 示例本身很简单,只需要修改 udp_client_demo.c 的2处代码,就能测试了: //连接WIFI,参数1是:WIFI名称,参数2是:…