代码随想录刷题记录 day51 下一个更大元素II + 接雨水

news2024/11/17 17:40:23

代码随想录刷题记录 day51 下一个更大元素II + 接雨水

503. 下一个更大元素 II

在这里插入图片描述

思想

和每日温度的思路是一样的,单调栈中存放的是元素的下标,需要学习的是如何模拟遍历两次数组。

for(int i=1;i<nums.length*2;i++){

​ //这其中所有有关于i的 都用i %nums.length 来表示

}

代码

class Solution {
    public int[] nextGreaterElements(int[] nums) {
        //循环是怎么考虑的呢?
        
        int[] res=new int[nums.length];
        Stack<Integer> stack=new Stack<>();
        Arrays.fill(res,-1);
        stack.push(0);//stack 存储数组元素的下标
        for(int i=1;i<nums.length*2;i++){
            if(nums[i%nums.length]<=nums[stack.peek()]){
                stack.push(i%nums.length);
            }else{
                //大于了
                while(!stack.empty() && nums[i%nums.length]>nums[stack.peek()]){
                    res[stack.peek()]=nums[i%nums.length];
                    stack.pop();
                }
                stack.push(i%nums.length);
            }
        }
        return res;

    }
}

42. 接雨水

在这里插入图片描述

思想

方法1:双指针法 按照列来累加,所以所有的宽度都是1

遍历每一个元素,想左去找高度比当前元素高的,想右去找高度比当前元素高的,取其中较矮的那个。

遍历每一个元素 重复次操作

方法2:单调栈 按照行来累加

既然是按照行来累加,那么就 需要得到长宽是多少

栈中存放的是元素的下标

  1. 数组的元素小于栈顶元素

    栈内的元素 从栈底到栈顶应该是从大到小的,遇到小的 直接入栈就好了

  2. 数组的元素等于栈顶元素

    将栈顶元素出栈,新元素入栈,高度相同 计算的是右边的高度

  3. 数组的元素大于栈顶的元素

    数组的元素大于栈顶的元素了 产生了高度差 可以计算雨水了
    栈顶的元素 就是左边的高度 height[stack.peek()]
    数组的元素 就是右边的高度 height[i]
    雨水高度=左右边界较矮的-底部的高度
    雨水的宽度=有边界-左边界-1(因为只求中间宽度 所以需要-1)

代码

class Solution {
    // public int trap(int[] height) {
    //     //双指针 按照列为单位来计算 
    //     //每一列的宽度为1
    //     //高度:当前列的左边 和右边最高的一列  lHeight rHeight
    //     //取其中最小的
    //     int res=0;

    //     for(int i=0;i<height.length;i++){
    //         if(i==0 || i==height.length-1) continue;//第一列和最后一列不接雨水

    //         int lHeight=height[i];
    //         int rHeight=height[i];

    //         for(int j=i-1;j>=0;j--){
    //             //向左寻找高度大于当前列的
    //             if(height[j]>lHeight){
    //                 lHeight=height[j];
    //             }
    //         }

    //         for(int j=i+1;j<height.length;j++){
    //             //向右寻找高度大于当前列的
    //             if(height[j]>rHeight){
    //                 rHeight=height[j];
    //             }
    //         }
    //         res+=Math.min(lHeight,rHeight)-height[i];

    //     }
    //     return res;
    // }

    public int trap(int[] height) {
        //单调栈
        int size=height.length;
        int sum=0;

        Stack<Integer>stack=new Stack<Integer>();
        stack.push(0);
        //栈中存放的是元素的下标
        //考虑三种情况
        //数组的元素小于栈顶元素
        //数组的元素等于栈顶元素
        //数组的元素大于栈顶的元素
        for(int i=1;i<height.length;i++){
            if(height[i]<height[stack.peek()]){
                //栈内的元素 从栈底到栈顶的数序是从大到小的
                stack.push(i);
            }else if(height[i]==height[stack.peek()]){
                //相等是计算右边的下标
                stack.pop();
                stack.push(i);
            }else{
                //数组的元素大于栈顶的元素了 产生了高度差 可以计算雨水了
                //栈顶的元素 就是左边的高度 height[stack.peek()]
                //数组的元素 就是右边的高度 height[i] 
                //雨水高度=左右边界较矮的-底部的高度
                //雨水的宽度=有边界-左边界-1(因为只求中间宽度 所以需要-1) 
                while(!stack.empty() && height[i]>height[stack.peek()]){
                    //为什么是while 如果是 3 2 1 4
                    //会计算两行的雨水量
                    int mid=stack.peek();//表示凹槽底部
                    stack.pop();
                    if(!stack.empty()){
                        int h=Math.min(height[stack.peek()],height[i])-height[mid];
                        int w=i-stack.peek()-1;
                        sum+=h*w;
                    }
                }
                stack.push(i);
            }
        }

        return sum;
    }
}

参考:[代码随想录](

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

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

相关文章

不学PPMT,做自己,FARMER BOB的“高山之道”和破局之路

1999年&#xff0c;有着“潮流玩具教父”之称的中国香港艺术家Michael Lau&#xff08;刘建文&#xff09;&#xff0c;率先开创一种艺术玩具&#xff0c;将艺术、设计、潮流、绘画、雕塑等多元素理念融入玩具载体。 后来&#xff0c;大家都把这种玩具称为“潮玩”&#xff0c…

从车辆工程转行程序员两年,我是这样走过来的

毕业已经两年&#xff0c;这意味着从车辆工程转行做程序员已经两年。 这两年来&#xff0c;我从一个C语言都用不熟悉的菜鸟&#xff0c;一步步到现在负责软件多个模块的开发和维护。我走过很多弯路&#xff0c;也踩过很多坑&#xff0c;当然也从中不停地学习和成长。 这篇文章把…

【Vant相关知识】

目录 1 什么是Vant 2 Vant的优势 3 Vant特性 4 第一个Vant程序 4.1 创建Vue项目 4.2 安装Vant支持 4.3 添加Vant引用 5 按钮组件 6 表单页面 7 area省市区选择 8 商品列表 1 什么是Vant Vant是一个轻量&#xff0c;可靠的移动端组件库&#xff0c;2017开源 目前 Va…

〖产品思维训练白宝书 - 产品思维认知篇④〗- 产品思维的核心要素

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

Word控件Spire.Doc 【评论】教程(1):在 C#、VB.NET 中插入 Word 注释

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

Web入门开发【二】- 网站设计

欢迎来到霍大侠的小院&#xff0c;我们来学习Web入门开发的系列课程。 首先我们来了解下这个课程能学到什么&#xff1f; 1、你将可以掌握Web网站的开发全过程。 2、了解基础的HTML&#xff0c;CSS&#xff0c;JavaScript语言。 3、开发自己的第一个网站。 4、认识很多对编…

06---SpringBoot整合MybatisPlus 实现增删改查和分页

1、Mybatis-plus简介 为什么要用MP&#xff1f; MyBatisPlus可以节省我们大量工作时间&#xff0c;所有的CRUD代码都可以自动化完成偷懒用的~如果是对sql语言不太熟练的建议先用mybatis&#xff0c;熟练后再用mybatis-plus 简述 官网https://baomidou.com/为简化开发而生My…

【并发】深入理解JMM并发三大特性(一)

【并发】深入理解JMM&并发三大特性&#xff08;一&#xff09; 今天是2022.11.16&#xff0c;在此之前我已经学习完了图灵课堂MySQL的课程&#xff0c;也是想这篇文章一样用CSDN博客的形式来记录这些知识点。 在并发中&#xff0c;JMM在大多数人眼中&#xff0c;它是整个…

Zookeeper 2 Zookeeper 安装与配置 2.1 Zookeeper 安装与配置

Zookeeper 【黑马程序员Zookeeper视频教程&#xff0c;快速入门zookeeper技术】 文章目录Zookeeper2 Zookeeper 安装与配置2.1 Zookeeper 安装与配置2.1.1 Zookeeper 下载安装2 Zookeeper 安装与配置 2.1 Zookeeper 安装与配置 2.1.1 Zookeeper 下载安装 【其实这块内容 学…

搜狗趁势而来,输入法江湖风云再起

在2022腾讯数字生态大会上&#xff0c;搜狗输入法正式推出面向B端的开放平台&#xff0c;这是自去年9月完成退市、并入腾讯以来&#xff0c;这家输入法C端王者第一个大动作&#xff0c;宣告着其进军B端的野心。几乎与此同时&#xff0c;如今已是自家兄弟的微信&#xff0c;悄然…

vue调用百度api时跨域的解决方案

今天在开发一个项目中发现vue前端调用百度ocr识别接口出现了跨域问题&#xff01; 百度api 的接口&#xff1a; https://aip.baidubce.com/oauth/2.0/token 和百度开发工程师沟通一个多小时&#xff0c;未找到解决方案&#xff0c;忽然想到了是不是nginx配置的问题&#xff0…

TCManager——中药房管理系统大作业

简介 由于最近一个月世界变化有点大&#xff0c;所以一直在同步自己的大脑&#xff0c;没有写博客。 上个月花了5天&#xff08;3天后端2天前端&#xff09;写了个经典的springbootvue2的中药房管理系统大作业——TCManager。项目已在gitee上&#xff08;校园网差&#xff0c;…

vscode自动添加头注释和函数注释

下载koroFileHeader插件 然后点它的wiki文档 会跳到它的github 配置字段 OBKoro1/koro1FileHeader Wiki GitHub 先找到vscdoe的setting文件&#xff0c;两种方法&#xff1a; 1&#xff0c; 然后点这里&#xff1a; 或者去搜索框搜索&#xff1a;FileHeader 出现如下&…

你的团队是王者还是青铜(下)

我们接着上篇继续聊。 问题4&#xff1a;谁动了团队的时间&#xff1f;如果重来一个迭代&#xff0c;你有7*40个小时的投资&#xff0c;你要如何决策团队的工作安排&#xff1f; “小溪&#xff0c;一会约开卡&#xff1b;小溪&#xff0c;我这有个问题&#xff1b;小溪&#…

SpringBoot+Vue物流仓储管理系统

项目背景 在信息化的时代&#xff0c;效率和速度就变得尤为重要了&#xff0c;具有高效率和速度就具有更好的竞争力&#xff0c;更受客户欢迎。与此同时&#xff0c;网购与人们的生活息息相关&#xff0c;顾客在网上购买的商品需要通过物流公司对这些商品进行管理和配送&#x…

十五、Docker 网络

1、概述 Docker 容器和服务如此强大的原因之一是您可以将它们连接在一起&#xff0c;或将它们连接到非 Docker 工作负载。Docker 容器和服务甚至不需要知道它们部署在 Docker 上&#xff0c;或者它们的对等体是否也是 Docker 工作负载。无论您的 Docker 主机运行 Linux、Window…

Doo Prime 为泰国 SOS 儿童村送温暖,公益有起点爱心无疆界

一年一度的圣诞节即将来临&#xff0c;在这欢乐的时刻&#xff0c; Doo Prime 荣幸地宣布 &#xff0c;向泰国 SOS 儿童村捐赠了 35 万泰铢 ( 约合 1.23 万美元 )&#xff0c;作为泰国南部城市合艾府 SOS 儿童村的房屋翻修费用。 Doo Prime 希望 SOS 儿童村的孩子们都能在温馨…

【小程序】网络数据请求

目录 1. 小程序中网络数据请求的限制 2. 配置 request 合法域名 3. 发起 GET 请求 4. 发起 POST 请求 5. 在页面刚加载时请求数据 5. 跳过 request 合法域名校验 6. 关于跨域和 Ajax 的说明 1. 小程序中网络数据请求的限制 出于安全性方面的考虑&#xff0c;小程序官方…

【目标检测】Objects as Points

目录概述细节anchor-base vs anchor free网络结构标注损失函数学习资料概述 本文是一个anchor-free的目标检测算法。 【2019】【CenterNet】 研究的问题&#xff1a; 如何更好地将目标检测问题建模为关键点检测问题 提出的方法&#xff1a; 一个简单高效的目标检测方法Cent…

抖音年货节增长秘籍:横向做阵地,纵向定节奏,提前深种草

抖音好物年货节即将到来&#xff0c;对于品牌来说&#xff0c;这将是新一年首次生意爆发的机会。为了更好的融入抖音电商生态&#xff0c;做好数字化经营主阵地&#xff0c;品牌面临多个新挑战&#xff1a; 大促Bigday流量费用高&#xff0c;品牌怎样更高效获取流量&#xff1f…