代码随想录算法训练营第五十九天| 503. 下一个更大元素 II、42. 接雨水。

news2025/6/19 15:04:35

503. 下一个更大元素 II

题目链接:力扣

题目要求:

        给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。

示例 1:

输入: nums = [1,2,1]
输出: [2,-1,2]
解释: 第一个 1 的下一个更大的数是 2;
数字 2 找不到下一个更大的数; 
第二个 1 的下一个最大的数需要循环搜索,结果也是 2。
  • 1 <= nums.length <= 104
  • -109 <= nums[i] <= 109

总结:

        本题的大概思路实际上和上两题的思路大差不差,区别就是,这里每次下一个的最大元素,可以反过来再从前面的找,它是一个循环的数组,那我们就把遍历的范围扩大到原来的两倍,然后大出的部分取模运算,就可以达到再次遍历之前元素的效果,最终返回的result数组大小还是一倍的大小。但是,每个位置的结果,可能就是该位置之前的元素值了,因为i取的范围是两倍的大小。

class Solution {
    public int[] nextGreaterElements(int[] nums) {
        int len = nums.length;
        int[] result = new int[len];
        Arrays.fill(result,-1);
        Stack<Integer> stack = new Stack<>();
        stack.push(0);
        for(int i = 1;i < 2*len;i++){
            if(nums[i % len] <= nums[stack.peek()]){
                stack.push(i % len);
            }else{
                while(!stack.isEmpty() && nums[i % len] > nums[stack.peek()]){
                    result[stack.peek()] = nums[i % len];
                    stack.pop();
                }
                stack.push(i % len);
            }
        }
        return result;
    }
}

42. 接雨水

题目链接:力扣

题目要求:

        给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 
  • n == height.length
  • 1 <= n <= 2 * 104
  • 0 <= height[i] <= 105

总结:

例如求列4的雨水高度,如图:

列4 左侧最高的柱子是列3,高度为2(以下用lHeight表示)。

列4 右侧最高的柱子是列7,高度为3(以下用rHeight表示)。

列4 柱子的高度为1(以下用height表示)

那么列4的雨水高度为 列3和列7的高度最小值减列4高度,即: min(lHeight, rHeight) - height。

列4的雨水高度求出来了,宽度为1,相乘就是列4的雨水体积了。

此时求出了列4的雨水体积。

一样的方法,只要从头遍历一遍所有的列,然后求出每一列雨水的体积,相加之后就是总雨水的体积了。

首先从头遍历所有的列,并且要注意第一个柱子和最后一个柱子不接雨水

         如果每次遍历一个位置i,再求其两边的的最大高度,复杂度为n的平方,超时了,所以需要在遍历前就把每个位置的最左高度,和最右高度求出来,用leftmax[i]数组代表每一个i位置的左边最大高度,right[i]数组代表每个i位置的右边的最大高度,比如说位置4的左边最大高度就为,位置3的左边最大高度与位置3的高度取最大值,位置4的右边最大高度就为,位置5的右边最大高度与位置5的高度取最大值。得到每个位置的左边最大高度和右边最大高度后,再开始遍历每列的水的体积,等于该位置左边最大高度和右边最大高度取最小值,然后再减去本位置的高度,如果这个值是个大于0的值,因为长度是1,所以体积与这个值是一样的,直接把这一列的体积累加到sum去,最终遍历完所有的列,返回最终水的总体积sum即可。

class Solution {
    public int trap(int[] height) {
        int len = height.length;
        if(height.length <= 2) return 0;
        int[] leftmax = new int[len];
        int[] rightmax = new int[len];
        leftmax[0] = 0;
        for(int i = 1;i < len;i++){
            leftmax[i] = Math.max(leftmax[i-1],height[i-1]);
        }
        rightmax[len - 1] = 0;
        for(int i = len - 2;i >= 0;i--){
            rightmax[i] = Math.max(rightmax[i+1],height[i+1]);
        }
        int sum = 0;
        for(int i = 1;i < len - 1;i++){
            int count = Math.min(leftmax[i],rightmax[i]) - height[i];
            if(count > 0) sum += count;
        }
        return sum;
    }
}

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

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

相关文章

( “树” 之 DFS) 110. 平衡二叉树 ——【Leetcode每日一题】

110. 平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] …

智慧钢铁厂人员定位系统解决方案,助力钢铁企业提升安全生产管理水平

作为国民经济的基础原材料产业&#xff0c;钢铁工业在经济发展中具有重要地位。中国钢铁工业不仅为我国国民经济的快速发展做出了重大贡献&#xff0c;也为世界经济的繁荣和世界钢铁工业的发展起到了积极的促进作用&#xff0c;但钢铁行业在快速发展的同时也存在一些安全管理问…

React应用(基于React脚手架)

目录前言&#xff1a;一、使用create-react-app创建react应用1、什么是 react 脚手架&#xff1f;2. 创建 cli 脚手架方式13. 创建 cli 脚手架方式24. npx:5. react脚手架项目结构6. 功能界面的组件化编码流程&#xff08;通用&#xff09;7. 如何更改脚手架版本二、React 组件…

【SpringMVC】7—文件上传

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

【深入理解SSD 实践】对NVMe SSD热插拔时,正确做法是怎样的?

声明 主页&#xff1a;元存储的博客_CSDN博客 依公开知识及经验整理&#xff0c;如有误请留言。 个人辛苦整理&#xff0c;付费内容&#xff0c;禁止转载。 内容摘要 前言 概念 SAS/SATA 和NVMe 区别 热插拔分类 热插拔基本原理 如何确认是否支持热插拔&#xff1f; 热插…

Python批量导出阿里云ECS和Redis实例的监控数据到Excel

背景 某公司使用阿里云的 ECS 和 Redis 服务作为其业务支撑&#xff0c;为了及时了解机器的使用情况&#xff0c;领导要求业务部门对所有阿里云机器的平均资源使用率进行统计&#xff0c;并汇总在一个 Excel 表格中&#xff0c;以便领导查看和分析。 需求 为了满足领导的需求…

C++ const的作用

1.const在C中是只读变量&#xff0c;在C中表示常量 以下代码&#xff0c;在C中是错误的&#xff0c;但是在C中是正确的。 void main() {const int n 10;int arr [n]; }2.const不仅可以定义一个常量&#xff0c;也可以定义函数参数 例如&#xff1a; char *strcpy(char *dest…

一次弄懂gzip模块启用和配置指令

接下来所学习的指令都来自ngx_http_gzip_module模块&#xff0c;该模块会在nginx安装的时候内置到nginx的安装环境中&#xff0c;也就是说我们可以直接使用这些指令。 1. gzip指令&#xff1a;该指令用于开启或者关闭gzip功能 注意只有该指令为打开状态&#xff0c;下面的指令才…

联想凌拓 ThinkSystem DE 系列全闪存阵列

ThinkSystem DE 系列全闪存阵列 超高的性能&#xff0c;极具竞争力的价格 通过消除过量配置最大限度地提高效率&#xff0c;同时通过降低空间、电源和冷却要求来降低成本。 利用高级数据保护&#xff0c;在本地或从远距离上防止数据丢失和停机事件。 在模块化 2U 构建模块中…

ModStartBlog v7.1.0 ChatGPT支持,界面全新优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装 …

【ChatGPT】ChatGPT-5 强到什么地步?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 ChatGPT-5 强到什么地步&#xff1f; 技术 深度学习模型的升级 更好的预测能力 自适应学习能力 特点 语言理解能力更强 自我修正和优化 更广泛的应用领域 应用 对话系统 智能写作…

2.含电热联合系统的微电网运行优化(文章复现)

说明书 相关代码资源&#xff1a;基于多目标粒子群算法冷热电联供综合能源系统运行优化 基于拉丁超立方法的风光场景生成与削减 粒子群综合能源系统优化的matlab实现 智能微电网PSO优化算法 MATLAB代码&#xff1a;含电热联合系统的微电网运行优化 关键词&#xff1a;微网…

基于PINN的极少监督数据二维非定常圆柱绕流模拟

2022年10月16日-19日&#xff0c;亚洲计算流体力学会议在韩国九州举办。会议涌现了不少结合人工智能技术进行流体力学模拟的论文成果&#xff0c;这说明人工智能技术逐渐渗透流体力学模拟领域。百度与西安交通大学的研究人员一起&#xff0c;利用飞桨框架和科学计算工具组件Pad…

生成式人工智能所面临的问题有哪些?

在生成式人工智能中工作需要混合技术、创造性和协作技能。通过发展这些技能&#xff0c;您将能够在这个令人兴奋且快速发展的领域应对具有挑战性的问题。 生成式人工智能是指一类机器学习技术&#xff0c;旨在生成与训练数据相似但不完全相同的新数据。 换句话说&#xff0c;…

WPS C++ 二次开发 Demo运行

1.官网二次开发地址&#xff1a;https://open.wps.cn/docs/client/wpsLoad 2.Demo源码下载&#xff1a; 经过测试上述链接找不到demo源码&#xff0c;可通过git命令下载&#xff1a; git clone https://code.aliyun.com/zouyingfeng/wps.git -b dev 图中cpp文件夹即为cdemo源码…

<Linux>进程概念

文章目录一、什么是进程1.进程概念2.进程描述 – PCB3.task_struct内容分类二、进程的基本操作1.查看进程2.结束进程3.通过系统调用获取进程标示符4.通过系统调用创建子进程(fork)三、进程状态1.普遍的操作系统状态2.Linux操作系统状态四、两种特殊的进程1.僵尸进程2.孤儿进程五…

sql语法:事务的”那些事“

Mysql版本&#xff1a;8.0.26 可视化客户端&#xff1a;sql yog 目录前言一、事务是什么&#xff1f;二、事务的特点三、如何提交事务和回滚事务?3.1 手动提交3.2 自动提交模式下开启事务3.3 注意事项四、事务的隔离级别4.1 模拟事务安全问题4.1.1 脏读问题模拟如下&#xff1…

11.Java面向对象----多态

Java面向对象—多态 面向对象简称 OO&#xff08;Object Oriented&#xff09;&#xff0c;20 世纪 80 年代以后&#xff0c;有了面向对象分析&#xff08;OOA&#xff09;、 面向对象设计&#xff08;OOD&#xff09;、面向对象程序设计&#xff08;OOP&#xff09;等新的系统…

Nacos介绍与安装

文章目录一、什么是Nacos(摘抄自官网介绍)二、Nacos安装2.1 下载安装包2.2 解压2.3 配置端口2.4.启动2.5.访问一、什么是Nacos(摘抄自官网介绍) Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发…

【模型复现】densenet,增加残差结构连接,复用特征图的角度降低了计算量还提升了精度,transition_block压缩特征图

相比ResNet&#xff0c;DenseNet[1608.06993] Densely Connected Convolutional Networks (arxiv.org)提出了一个更激进的密集连接机制&#xff1a;即互相连接所有的层&#xff0c;具体来说就是每个层都会接受其前面所有层作为其额外的输入。下图为DenseNet的密集连接机制。可以…