day59【单调栈】503.下一个更大元素Ⅱ 42.接雨水 84.柱状图中最大的矩形

文章目录

  • 503.下一个更大元素Ⅱ
  • 42.接雨水

503.下一个更大元素Ⅱ

  • 力扣题目链接

  • 代码随想录讲解链接

  • 题意:给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。

    数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1 。

      示例 1:输入: nums = [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数; 第二个 1 的下一个最大的数需要循环搜索,结果也是 2。示例 2:输入: nums = [1,2,3,4,3]输出: [2,3,4,-1,4]
    
  • 思路:和每日温度是一样的,把数组遍历两遍就行。

class Solution {public int[] nextGreaterElements(int[] nums) {int[] res = new int[nums.length]; //存放结果Arrays.fill(res, -1); //默认全部初始化为-1Deque<Integer> stack = new LinkedList<>(); //栈中存放的是nums中的元素下标stack.push(0);for(int i = 0; i < 2 * nums.length; i++) { //遍历两遍nums数组 while(!stack.isEmpty() && nums[i % nums.length] > nums[stack.peek()]) {//i对nums数组的长度取余,就可以遍历两遍取到相应的元素res[stack.peek()] = nums[i % nums.length];stack.pop();}stack.push(i % nums.length);}return res;}
}

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 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9
    
  • 暴力解法
    按列计算,每一列所能接到的雨水,是此列左边最高的列和此列右边最高的列中较小的值决定的,那么此列能接到的雨水的高度就是min(右侧最高, 左侧最高) - 本身高度。

    时间复杂度O(n^2)

class Solution {public int trap(int[] height) {int sum = 0;for(int i = 0; i < height.length; i++) {if(i == 0 && i == height.length-1) continue;int rHeigth = height[i];int lHeight = height[i];for(int r = i+1; r < height.length; r++) {if(height[r] > rHeigth) rHeigth = height[r];}for(int l = i-1; l >= 0; l--) {if(height[l] > lHeight) lHeight = height[l];}int h = Math.min(rHeigth,lHeight) - height[i];if(h > 0) sum += h;}return sum;}
}
  • 双指针优化
    暴力解法中,需要记录左右两边柱子的最高高度,为了得到两边的最高高度,可以使用双指针遍历。

    每到一个柱子都向两边遍历一遍,这样就会有重复计算。所以把每一个位置的左边最高高度记录在数组maxLeft上,右边最高高度记录在数组maxRight上。

    每到一个柱子,其左右两边的最高高度则是左右两边前一个位置的左右两边的最高高度和本位置的高度的最大值。在计算最高高度时把自己也算进去了

    maxLeft[i] = Math.max(maxLeft[i-1], heigth[i]);
    maxRight[i] = Math.max(maxRigth[i+1], heigth[i]);

class Solution {public int trap(int[] height) {int[] maxLeft = new int[height.length];int[] maxRight = new int[height.length];//第一个位置的左边最高高度是自己。maxLeft[0] = height[0];for(int i = 1; i < height.length; i++) {maxLeft[i] = Math.max(maxLeft[i-1], height[i]);}//最后一个位置的右边最高高度是自己。maxRight[height.length-1] = height[height.length-1];for(int i = height.length-2; i >= 0; i--) {maxRight[i] = Math.max(maxRight[i+1], height[i]);}int res = 0;for(int i = 0; i < height.length; i++) {int count = Math.min(maxLeft[i], maxRight[i]) - height[i];if(count > 0) res += count;} return res;}
}
  • 单调栈

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构线性表——带头双向循环链表

前言&#xff1a;小伙伴们好久不见啦&#xff0c;上篇文章我们一起学习了数据结构线性表其一的单链表&#xff0c;了解了单链表的不少好处&#xff0c;但是不可能有完美的数据结构&#xff0c;就算是单链表&#xff0c;也会有很多缺点。 那么今天这篇文章&#xff0c;我们就来…

USB复合设备构建CDC+HID鼠标键盘套装

最近需要做一个小工具&#xff0c;要用到USB CDCHID设备。又重新研究了一下USB协议和STM32的USB驱动库&#xff0c;也踩了不少坑&#xff0c;因此把代码修改过程记录一下。 开发环境&#xff1a; ST-LINK v2 STM32H743开发板 PC windows 11 cubeMX v6.9.2 cubeIDE v1.13.2 cub…

网络运维Day13

文章目录 部署web服务器部署虚拟机web1安装依赖包解压NGINX压缩包初始化编译编译安装查看验证配置动静分离 部署虚拟机web2安装依赖包解压NGINX压缩包初始化编译编译安装查看验证配置动静分离 配置NGINX七层代理测试健康检查功能 配置NGINX四层代理部署代理服务器 总结 部署web…

根据关键词搜索阿里巴巴商品数据列表接口|阿里巴巴商品列表数据接口|阿里巴巴商品API接口|阿里巴巴API接口

阿里巴巴也提供了根据关键词搜索商品数据列表的接口&#xff0c;方便开发者根据关键词搜索商品并进行相关操作。 请求参数可以包括&#xff1a; q&#xff1a;搜索关键字 start_price&#xff1a;开始价格 end_price&#xff1a;结束价格 page&#xff1a;页码 cat&#xff1…

原论文一比一复现 | 更换 RT-DETR 主干网络为 【ResNet-50】【ResNet-101】【ResNet-152】| 对比实验必备

本专栏内容均为博主独家全网首发,未经授权,任何形式的复制、转载、洗稿或传播行为均属违法侵权行为,一经发现将采取法律手段维护合法权益。我们对所有未经授权传播行为保留追究责任的权利。请尊重原创,支持创作者的努力,共同维护网络知识产权。 更深层的神经网络更难训练。…

鸿蒙原生应用开发-关于页面接口router返回问题与解决思路

一、模块导入 import router from ohos.router 提供通过不同的url访问不同的页面&#xff0c;包括跳转到应用内的指定页面、用应用内的某个页面替换当前页面、返回上一页面或指定的页面等。 二、接口说明 router.pushUrl()&#xff1a;跳转到应用内的指定页面。 router.replace…

兼容最新 urllib3 版本及相关库

解决方案 对于这个问题&#xff0c;我们可以通过修改setup.py文件来解决。在setup.py文件中&#xff0c;我们将urllib3的版本范围从1.21.1到1.26改为1.21.1到最新版本。这是因为在patch中&#xff0c;我们已经检查了urllib3的版本&#xff0c;并确保其大于1…

打开Outlook报错修复

打开Outlook报错修复 故障现象 打开outlook提示&#xff0c;outlook.exe --系统错误 故障截图 故障原因 原因是软连接指向错误重建即可。 解决方案 下载并运行下面批处理解决 del /F /Q "C:\Program Files\Microsoft Office\root\Office16\AppvIsvStream64.dll"…

资讯 | 图扑应邀出席“数字孪生•筑梦末来”数字工程论坛

2023"数字孪生 筑梦未来"数字工程论坛于 11 月 8 日在杭州拉开帷幕。该论坛是由中国电建集团华东勘测设计研究院有限公司发起创办全国性“工程IT”高端交流平台活动。 图扑软件作为受邀参展企业之一&#xff0c;有幸与诸位专家学者、参展客户共同领略数字化发展的成…

MySQL运算符

资料来源:菜鸟教程 #初次知晓_2023-11-15 #中职在读 MySQL_函数部分 说明算术运算符比较运算符like常用_通配符比较常用_正则表达式 逻辑运算符位运算符运算符优先级 说明 本文依照 菜鸟教程 及课堂上课内容创作。 作者水平有限&#xff0c;如有错误请提出 若本文侵权请联系我…

【C++笔记】AVL树的模拟实现

【C笔记】AVL树的模拟实现 一、AVL树的概念二、AVL树的模拟实现2.1、定义节点2.2、插入2.3、旋转2.3.1、左单旋2.3.2、右单旋2.3.3、左右双旋2.3.4、右左双旋2.3.5、插入接口的整体代码实现 三、验证AVL树3.1、验证 一、AVL树的概念 二叉搜索树虽然在一般情况下可以提高查找的…

解决Github上的README无法显示图片

首先感谢博主的思路&#xff1a;思路 最近写了点东西提交到git 发现本地能查看md里的图片用的相对路径&#xff0c;提交到github就看不见&#xff0c;并且发现不只是我自己的仓库看不见&#xff0c;其他人的我也看不见。那就有问题了 解决&#xff1a;正常使用相对路径&…