代码随想录算法训练营Day 59 || 503.下一个更大元素II、42. 接雨水

503.下一个更大元素II

力扣题目链接(opens new window)

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

示例 1:

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

提示:

  • 1 <= nums.length <= 10^4
  • -10^9 <= nums[i] <= 10^9

  1. 初始化:创建一个栈来保存索引,一个数组 result 来存储结果,初始时该数组的所有值设为 -1(表示没有找到下一个更大的元素)。

  2. 双重遍历:由于这是一个循环数组,我们需要遍历两次数组。第一次遍历找到每个元素右侧的第一个更大的元素,第二次遍历用来找到那些在数组末尾但它们的更大元素在数组开头的情况。

  3. 栈的使用:在遍历的过程中,每次我们考察一个新元素时,我们检查栈顶元素代表的数组值是否小于当前元素。如果是,则我们找到了栈顶元素的下一个更大元素。我们在 result 数组的相应位置记录这个更大元素,然后将栈顶元素弹出。这个过程一直持续到栈为空或者栈顶元素代表的数组值大于等于当前元素。之后,将当前元素的索引压入栈中。

  4. 循环:由于数组是循环的,我们可以通过取模操作来模拟数组的循环。

class Solution:def nextGreaterElements(self, nums: List[int]) -> List[int]:n = len(nums)result = [-1] * nstack = []for i in range(2 * n):while stack and nums[stack[-1]] < nums[i % n]:result[stack.pop()] = nums[i % n]if i < n:stack.append(i)return result

42. 接雨水

力扣题目链接(opens new window)

给定 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

在接雨水问题中,双指针法的核心思想是同时从数组的两端开始遍历,使用两个指针(leftright),分别代表数组的左端和右端。在这个过程中,我们维护两个变量(left_maxright_max),它们分别表示遍历到目前为止左侧和右侧遇到的最大高度。这样,我们可以在每个步骤中确定当前位置能够接收的雨水量。

  1. 初始化指针和变量:

    • left = 0(数组的开始位置)
    • right = len(height) - 1(数组的结束位置)
    • left_max = height[0]
    • right_max = height[len(height) - 1]
  2. 遍历数组:

    • 使用两个指针从两端开始遍历数组,直到它们相遇。
    • 在每个位置,更新 left_maxright_max
  3. 比较 left_maxright_max

    • 如果 left_max < right_max,则说明左边的柱子是短板,处理左边的柱子。
    • 否则,处理右边的柱子。
  4. 计算雨水量并累加:

    • 对于左边的柱子:left_max 是左边最高的柱子,height[left] 是当前柱子的高度,因此在位置 left 上的雨水量是 left_max - height[left]
    • 对于右边的柱子:同理,使用 right_max - height[right] 来计算雨水量。
    • 将计算出的雨水量累加到总量中。
  5. 移动指针:

    • 如果处理的是左边的柱子,将 left 指针向右移动(left += 1)。
    • 如果处理的是右边的柱子,将 right 指针向左移动(right -= 1)。
  • 这种方法之所以有效,是因为在任何位置,能够接的雨水量由左边和右边最高的柱子中较低的那个决定。
  • left_maxright_max 保证了不会超过当前位置的最大高度,因此可以安全地计算每个位置的雨水量。

 

class Solution:def trap(self, height: List[int]) -> int:if not height:return 0n = len(height)left, right = 0, n - 1left_max, right_max = height[0], height[n - 1]ans = 0while left < right:if left_max < right_max:left += 1left_max = max(left_max, height[left])ans += max(0, left_max - height[left])else:right -= 1right_max = max(right_max, height[right])ans += max(0, right_max - height[right])return ans# 示例用法
sol = Solution()
print(sol.trap([0,1,0,2,1,0,1,3,2,1,2,1]))  # 输出应为 6
print(sol.trap([4,2,0,3,2,5]))               # 输出应为 9

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

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

相关文章

华清远见嵌入式学习——网络编程——作业4

作业要求&#xff1a;①使用IO多路复用中的select函数实现TCP并发服务器客户端 ②使用IO多路复用中的poll函数实现TCP并发服务器的服务器端 一、 代码 #include <myhead.h>#define SERPORT 8888 //服务器端口号 #define SERIP "192.168.114.113"…

曲率半径的推导

参考文章 参考文章

ABB机 器 人 操 作 培 训

目 录 1 培训手册介绍 ---------------------------------------------2 2 系统安全与环境保护 ---------------------------------------------3 3 机器人综述 ---------------------------------------------5 4 机器人示教 --------------------------------------------12…

强化学习------贝尔曼方程

目录 前言基础知识马尔可夫决策过程 (Markov decision process, MDP)回报(Return)折扣回报(Discounted Return) State Value&#xff08;状态价值函数&#xff09;贝尔曼方程的推导贝尔曼方程的矩阵形式Action Value&#xff08;动作价值函数&#xff09;贝尔曼最优公式 前言 …

pip安装python包到指定python版本下

python -m pip install 包名1.命令行进入到指定python安装目录。比如我电脑上有python3.8也有python3.9。准备给python3.9安装指定的包

gitee推荐-PHP面试准备的资料

该内容为giee项目。PHP-Interview: 这个项目是自己准备PHP面试整理的资料。包括PHP、MySQL、Linux、计算机网络等资料。方便自己以后查阅&#xff0c;会不定期更新&#xff0c;欢迎提交pr&#xff0c;如果错误&#xff0c;请指出&#xff0c;谢谢 在线预览地址&#xff1a;Intr…

Android7.1 高通平台 修改系统默认语言

客户需求&#xff1a;修改系统默认语言为英文&#xff08;美国&#xff09; 源码位置&#xff1a;/build/tools/buildinfo.sh 只需修改 ro.product.locale的值即可&#xff0c;如下图&#xff1a;

【大数据】Docker部署HMS(Hive Metastore Service)并使用Trino访问Minio

本文参考链接置顶&#xff1a; Presto使用Docker独立运行Hive Standalone Metastore管理MinIO&#xff08;S3&#xff09;_hive minio_BigDataToAI的博客-CSDN博客 一. 背景 团队要升级大数据架构&#xff0c;需要摒弃hadoop&#xff0c;底层使用Minio做存储&#xff0c;应用…

k8s部署的java服务查看连接nacos缓存的配置文件

一、问题描述 k8s部署的java服务&#xff0c;使用nacos中的配置文件&#xff0c;需要在缓存中查看该服务具体是使用到了哪些配置文件 二、解决 参考文档: https://nacos.io/zh-cn/docs/system-configurations.html 文档描述如下: 进入java服务容器进入用户目录下的nacos&a…

一体化大气环境监测设备实时守护我们的空气质量

WX-CSQX12 随着空气污染问题的日益严重&#xff0c;大气环境监测设备成为了我们生活中不可或缺的一部分。而一体化的大气环境监测设备&#xff0c;更是为我们的环境保护工作带来了更多的便利和效益。 一体化大气环境监测设备是一种集成了多种功能于一体的环保设备&#xff0c;…

使用JVS低代码表单引擎高效管理文件,实现个性化需求

在数字化、信息化的时代&#xff0c;文件上传与管理功能已经成为了各类应用系统的标配。无论是在办公自动化、项目管理还是内容管理系统中&#xff0c;我们都希望能轻松、高效地完成文件的上传、查看和管理。JVS低代码表单引擎提供了文件类组件。无论是文件类型、大小的限制&am…

景区智慧旅游智能化系统方案:PPT全文58页,附下载

关键词&#xff1a;智慧景区解决方案&#xff0c;智慧文旅解决方案&#xff0c;智慧旅游解决方案&#xff0c;智慧文旅综合运营平台 一、景区智慧旅游智能化系统建设背景 近年来&#xff0c;随着信息技术的快速发展和普及&#xff0c;以及旅游市场的不断扩大和升级&#xff0…