单调栈问题---(每日温度,下一个更大元素Ⅰ)

news2025/1/16 21:12:29

代码随想录day 58 单调栈问题— 每日温度,下一个更大元素Ⅰ

文章目录

    • 1.leetcode 739. 每日温度
        • 1.1 详细思路及解题步骤
        • 1.2Java版代码示例
    • 2.leetcode 496. 下一个更大元素 I
        • 2.1 详细思路及解题步骤
        • 2.2Java版代码示例

1.leetcode 739. 每日温度

在这里插入图片描述

1.1 详细思路及解题步骤

  这题会用到单调栈的方法来做,为什么用单调栈呢,什么时候又能想到用单调栈呢?
  当题目出现一维数组且需要求当前位置往前或者往后的第一个比它大or小的值,这时候就会用单调栈的方法去做。
  需要考虑的问题有

  1. 单调栈中存放的是索引
  2. 单调栈中存放的顺序,是递增还是递减呢。

使用单调栈主要有三个判断条件。

当前遍历的元素T[i]小于栈顶元素T[st.peek()]的情况 //栈.peek()在Java中表示栈顶元素
当前遍历的元素T[i]等于栈顶元素T[st.peek()]的情况
当前遍历的元素T[i]大于栈顶元素T[st.peek()]的情况

以第一个例子 temp = [73,74,75,71,69,72,76,73]

  1. 先将第一个索引也就是0方法栈中
  2. 然后遍历到第二个位置的时候判断temp[1]>temp[stack.peek()]/表示栈顶元素/
    这时就找到了比temp[0]大的值,然后就用res[0]=1-stack.peek().

    …上面是当前遍历的元素T[i]大于栈顶元素T[st.peek()]的情况 如果当前遍历的元素T[i]小于栈顶元素T[st.peek()]的情况 和当前遍历的元素T[i]等于栈顶元素T[st.peek()]的时候,那么就直接将遍历位置的索引存入栈中stack.push(i),就按照这种方法顺着来就欧克了。

1.2Java版代码示例

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
      int len=temperatures.length;
      int[] result= new int[len];
      Deque<Integer> stack=new LinkedList<>();
      stack.push(0);
      for(int i=1;i<len;i++){
          if(temperatures[i]<=temperatures[stack.peek()]){
              stack.push(i);
          }else{
            while(!stack.isEmpty()&&temperatures[stack.peek()]<temperatures[i]){
              result[stack.peek()]=i-stack.peek();
              stack.pop();
          }
          stack.push(i);//别漏了,弹出来之后最终要加进去
          }

      } 
      return result;
    }
}

2.leetcode 496. 下一个更大元素 I

在这里插入图片描述


2.1 详细思路及解题步骤

  这题与上题做法差不多,但是会比较难想,可以先将nums1的内容存放在一个Map上面,数组的值和索引一一对应,然后就开始对nums2进行放入栈的操作,
①当前遍历的元素nums2[i]小于栈顶元素nums2[st.peek()]和 当前遍历的元素nums2[i]等于栈顶元素nums2[st.peek()]的情况 就不用考虑nums1中的东西.
②当前遍历的元素nums2[i]大于栈顶元素T[st.peek()]的情况时候,就需要考虑栈顶的元素是否在Map中存在,如果存在就需要记录当前遍历的nums[2],此时这个值就是要求的更大的下个元素。

2.2Java版代码示例

class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
       Deque<Integer> stack=new LinkedList<>();
       int[] result=new int[nums1.length];
       Arrays.fill(result,-1);
       Map<Integer,Integer> map=new HashMap<>();
       stack.push(0);
       for(int i=0;i<nums1.length;i++){
           map.put(nums1[i],i);
       }
       for(int i=1;i<nums2.length;i++){
           if(nums2[stack.peek()]>=nums2[i]){
               stack.push(i);
           }else{
               while(!stack.isEmpty()&&nums2[stack.peek()]<nums2[i]){
                   if(map.containsKey(nums2[stack.peek()])){
                       Integer in=map.get(nums2[stack.peek()]);
                       result[in]=nums2[i];
                   }
                   stack.pop();//别漏勒
               }
               stack.push(i);
           }
       }
       return result;
    }
}

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

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

相关文章

Spark RDD编程模型及算子介绍(一)

文章目录RDD编程模型介绍RDD的两种算子及延迟计算常见的Transformation算子RDD编程模型介绍 RDD是Spark 对于分布式数据集的抽象&#xff0c;它用于囊括所有内存中和磁盘中的分布式数据实体。每一个RDD都代表着一种分布式数据形态。在RDD的编程模型中&#xff0c;一共有两种算…

Linux-服务管理

服务介绍 服务本质就是进程&#xff0c;但是是运行在后台的&#xff0c;通常都会监听某个端口&#xff0c;等待其他程序的ing求&#xff0c;比如mysqld&#xff0c;sshd&#xff0c;防火墙灯&#xff0c;因为又称为守护进程 如何管理服务 CentOS7.0前使用service命令 servi…

SpringBoot-配置

目录 起步依赖原理分析 配置文件分类 YAML YAML&#xff1a;基本语法 YAML&#xff1a;数据格式 YAML&#xff1a;参数引用 读取配置内容 profile Profile-小结 内部配置加载顺序 外部配置加载顺序 起步依赖原理分析 在spring-boot-starter-parent中定义了各种技术的…

[附源码]Python计算机毕业设计GuiTar网站设计

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【学习笔记】《模式识别》4:贝叶斯判别准则

贝叶斯判别准则 文章目录贝叶斯判别准则一、研究对象及相关概率1. 两类研究对象2.概率3. 条件概率4. 模式识别中的三个概率5. 两对条件概率的区别二、贝叶斯决策1.最小错误率贝叶斯决策2. 最小风险贝叶斯决策3. (0-1)损失最小风险贝叶斯决策4.正态分布模式的贝叶斯决策三、贝叶…

RFID在钢筋仓库管理中的应用

RFID在钢筋仓库管理中的应用 应用背景 随着经济的迅速发展&#xff0c;带动了钢材业的迅速发展&#xff0c;钢筋的使用量也在改革开放后有了近370多倍的增长&#xff0c;如此大量的钢筋在库存管理&#xff0c;盘点&#xff0c;防盗&#xff0c;各种型号发货、防窜货上等等一系…

图片链接或pdf链接通过浏览器打开时,有时可以直接预览,有时却是下载,为什么?

在前端开发中&#xff0c;有时候需要对一些文件链接进行特殊处理&#xff0c;比如对于一些图片链接或者PDF链接&#xff0c;有时我们需要通过浏览器打开进行预览&#xff0c;有时又不希望通过浏览器进行打开&#xff0c;而是希望能够直接下载到本地。但现实效果却往往跟我们相反…

硅麦驱动开发及调试(pdm>>I2S>>pcm)

pdm 协议 PDM接口只有两根信号线&#xff1a; PDM_CLK 时钟信号。 PDM_DATA 数据信号。 I2S协议 数据发送规格 I2S在BCLK的下降沿发送数据&#xff08;发送&#xff09;&#xff0c;在上升沿进行数据采样&#xff08;接收&#xff09;。每次是先发送最高位&#xff0c;最后…

Hadoop概述

Hadoop概述 Hadoop介绍 狭义上Hadoop值的是Apache的一款开源软件。 用java语言实现开源软件框架 允许使用简单的编程模型跨计算机集群对大型数据集进行分布式处理 Hadoop核心组件 Hadoop HDFS(分布式文件存储管理系统)&#xff1a;解决海量数据存储 Hadoop YARN(集群资源管理…

3-2、python内置数据类型(列表和元组)

文章目录序列列表列表的创建列表的基本特性连接操作符和重复操作符成员操作符&#xff08;in和not in&#xff09;索引切片for循环列表的常用方法增加修改&#xff08;通过索引和切片重新赋值&#xff09;查看删除其他操作元组&#xff08;和列表相比&#xff0c;不能增删改元素…

30分钟带你精通Git使用

一、 版本控制工具 1.1. 什么是版本控制系统&#xff1f; 版本控制系统&#xff08;Version Control System&#xff09;:是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。版本控制系统不仅可以应用于软件源代码的文本文件&#xff0c;而且…

[附源码]SSM计算机毕业设计班级风采网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

TIA博途中累计流量的两种计算方法示例

TIA博途中累计流量的两种计算方法示例 如下图所示,首先,我们要了解累计流量的含义: 即t1至t2时刻,对瞬时流量求定积分,由上图可知,t1至t2的定积分,即蓝色部分的面积,那么直接求这个面积是有难度的,我们只能用近似的方法来求取, 如下图所示,把该部分面积分割成一个个…

最简单的git图解(git stash)

大家平时开发过程中肯定遇到过这样的情况&#xff1a;代码写了一半&#xff0c;但是需要紧急修改一个bug&#xff0c;还是在当前项目中修改&#xff0c;这时怎么办呢&#xff1f;把写了一半的代码进行提交&#xff1f;可能编译还通不过&#xff0c;或是启动不了&#xff0c;要是…

Java项目:SSH学生学籍管理系统及教务管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本系统包含管理员、教师、学生三种角色; 管理员角色包含以下功能&#xff1a; 管理员登录,学科管理,班级管理,教师管理,学籍信息管理,课表管理…

外贸软件助力国际贸易企业业财共享数字化转型升级

外贸企业数字化转型新机遇丨汇信外贸软件助力业财一体共享升级 随着国际化的进程不断加速&#xff0c;国际贸易市场的发展&#xff0c;使得外贸企业的业务范围不断扩大&#xff0c;海量的资源信息在世界各地不断产生。为了应对国际贸易信息传递的及时性&#xff0c;关于财务信…

[MySQL]复杂查询(进阶)

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1.新增 2. 聚合查询 2.1 聚合函数 3. 分组查询…

Web UI 自动化测试:如何使用隐私模式进行测试

来啦老铁&#xff01; 这两天有个任务需要在桌面端 UI 自动化中使用隐私模式进行测试&#xff0c;之前没有用过&#xff0c;且在调研的时候还是小小花了点时间各种查资料的&#xff0c;因此做一下记录&#xff1b; 学习路径 1、Chrome 浏览器配置&#xff1b; 2、Edge 浏览…

电脑换cpu要重装系统吗

​cpu是一台电脑的控制以及运算核心&#xff0c;有十分重要的作用&#xff0c;不少小伙伴会遇到更换cpu的问题&#xff0c;所以小伙伴会提前了解换cpu要重装系统吗或者换cpu后bios如何设置的这类问题&#xff0c;接下来小编就为大家带来了详细的介绍&#xff0c;感兴趣的用户可…

(七)Bean的实例化方式

文章目录环境Bean的实例化方式通过构造方法实例化通过简单工厂模式实例化通过工厂方法模式实例化通过FactoryBean接口实例化BeanFactory和FactoryBean的区别BeanFactoryFactoryBean工厂Bean的使用&#xff1a;注入自定义Date上一篇&#xff1a;&#xff08;六&#xff09;Sprin…