当前位置: 首页 > news >正文

leetcode hot100 之【LeetCode 42. 接雨水】 java实现

LeetCode 42. 接雨水

题目描述

给定一个非负整数数组 height 表示柱状图中每个柱子的高度,请你计算按此排列的柱状图能接多少雨水。

示例 1:

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面的柱状图可以通过 6 个单位的雨水。

示例 2:

输入:height = [4,2,0,3,2,5]
输出:9

提示:

  • 0 <= height.length <= 10^4
  • 0 <= height[i] <= 10^5

Java 实现解法

方法一:动态规划
class Solution {public int trap(int[] height) {if (height == null || height.length == 0) {return 0;}int n = height.length;int[] leftMax = new int[n];int[] rightMax = new int[n];leftMax[0] = height[0];for (int i = 1; i < n; i++) {leftMax[i] = Math.max(leftMax[i - 1], height[i]);}rightMax[n - 1] = height[n - 1];for (int i = n - 2; i >= 0; i--) {rightMax[i] = Math.max(rightMax[i + 1], height[i]);}int water = 0;for (int i = 0; i < n; i++) {water += Math.min(leftMax[i], rightMax[i]) - height[i];}return water;}
}

解题思路

  • 动态规划:这个问题可以通过两次遍历数组来解决。首先,我们从左到右遍历数组,记录每个位置左侧最高的柱子高度。然后,从右到左遍历数组,记录每个位置右侧最高的柱子高度。
  • 计算雨水量:对于数组中的每个柱子,能接到的雨水量取决于其左右两侧最高的柱子高度中的较小值,减去该柱子的高度。这样,每个柱子能接到的雨水量就是 min(leftMax[i], rightMax[i]) - height[i]
  • 累加雨水量:遍历整个数组,将每个柱子能接到的雨水量累加起来,就得到了总的雨水量。

这种方法的时间复杂度是 O(n),其中 n 是数组 height 的长度,因为我们对数组进行了三次遍历。空间复杂度是 O(n),因为我们使用了两个额外的数组 leftMaxrightMax 来存储左右两侧的最高柱子高度。

方法二:双指针
class Solution {public int trap(int[] height) {int n = height.length;int left = 0, right = n - 1;int leftMax = 0, rightMax = 0;int water = 0;while (left < right) {if (height[left] <= height[right]) {if (height[left] >= leftMax) {leftMax = height[left];} else {water += leftMax - height[left];}left++;} else {if (height[right] >= rightMax) {rightMax = height[right];} else {water += rightMax - height[right];}right--;}}return water;}
}

解题思路

  • 双指针:我们使用两个指针 leftright 分别从数组的两端开始向中间移动。
  • 维护最大高度:同时维护两个变量 leftMaxrightMax 来记录 leftright 指针左侧和右侧的最大高度。
  • 计算雨水量:当 height[left] <= height[right] 时,我们移动 left 指针,并更新 leftMax。如果 height[left] 小于 leftMax,则这部分可以接到雨水,雨水量为 leftMax - height[left]。类似地,当 height[left] > height[right] 时,我们移动 right 指针,并更新 rightMax,计算雨水量。
  • 累加雨水量:将每次计算得到的雨水量累加起来,得到总的雨水量。

这种方法的时间复杂度是 O(n),其中 n 是数组 height 的长度,因为我们只遍历了数组一次。空间复杂度是 O(1),因为我们只使用了常数个额外的变量,没有使用额外的空间。

注:来源leetcode网站

相关文章:

leetcode hot100 之【LeetCode 42. 接雨水】 java实现

LeetCode 42. 接雨水 题目描述 给定一个非负整数数组 height 表示柱状图中每个柱子的高度&#xff0c;请你计算按此排列的柱状图能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面的柱状图可以…...

10月18日,每日信息差

第一、现代汽车集团在上海举办了中国前瞻技术研发中心的发布及启新庆典&#xff0c;宣布成立其全资法人公司 —— 现代前瞻汽车技术开发&#xff08;上海&#xff09;有限公司。该中心是集团在海外建立的首个前瞻技术研发中心&#xff0c;专注于自动驾驶、智能座舱、共享出行等…...

Axure科技感元件:打造可视化大屏设计的得力助手

Axure&#xff0c;作为一款专业的原型设计工具&#xff0c;凭借其强大的设计功能、丰富的组件库和灵活的交互能力&#xff0c;成为了许多设计师打造科技感设计的首选工具。其中&#xff0c;Axure科技感元件更是以其独特的魅力和实用性&#xff0c;在数据可视化大屏、登录界面、…...

【模板】最近公共祖先(LCA)倍增

P3379 P3379 【模板】最近公共祖先&#xff08;LCA&#xff09; # 【模板】最近公共祖先&#xff08;LCA&#xff09; ## 题目描述 如题&#xff0c;给定一棵有根多叉树&#xff0c;请求出指定两个点直接最近的公共祖先。 ## 输入格式 第一行包含三个正整数 $N,M,S$&#…...

我的JAVA项目构建

1.Maven maven就是pip 设置maven下载的的jar包位置 换源 下载插件maven-search 配置dependency 2.Tomcat 设置环境变量JAVA_HOME 设置编码方式 方框就是路径的前缀 3.Servlet 新建项目 写一个类继承HttpServlet&#xff0c;复写doGet(应对Get请求)&#xff0c;doPost(应对…...

应用层协议 序列化

自定义应用层协议 例子&#xff1a;网络版本计算器 序列化反序列化 序列化&#xff1a;将消息&#xff0c;昵称&#xff0c;日期整合成消息-昵称-日期 反序列化&#xff1a;消息-昵称-日期->消息&#xff0c;昵称&#xff0c;日期 在序列化中&#xff0c;定义一个结构体…...

【HAD】Half-Truth: A Partially Fake Audio Detection Dataset

文章目录 Half-Truth: A Partially Fake Audio Detection Dataset背景key points研究数据集设计评价指标实验基线:utterance-level分类(话语级)基线:segment-level分类(片段级)Half-Truth: A Partially Fake Audio Detection Dataset 会议/期刊:Interspeech 2021 CCF-C…...

OpenAI Prompt generation - 生成和优化Prompt的Prompt

OpenAI Prompt generation - 生成和优化Prompt的Prompt 从头开始创建 Prompt 可能很耗时&#xff0c;所以快速生成 Prompt 可以帮助我们提高效率。 下面是 OpenAI 提供的协助生成 Prompt 的 Prompt。 from openai import OpenAIclient OpenAI()META_PROMPT ""&qu…...

Android技术探索:深入解析Android组件

Android系统以其开放性和多样性&#xff0c;成为了众多开发者的首选平台。在Android应用的开发中&#xff0c;组件&#xff08;Components&#xff09;是构建应用的基础元素。深入了解Android组件&#xff0c;对于开发者来说至关重要。本文将详细探讨Android的四大核心组件&…...

使用R-GCN处理异质图ACM的demo

加载和处理数据集 import torch from torch_geometric.datasets import HGBDataset from torch_geometric.transforms import RandomLinkSplit# 加载ACM数据集&#xff0c;这是一个包含论文&#xff08;paper&#xff09;、主题&#xff08;subject&#xff09;以及它们之间关…...

征程 6E DISPLAY 功能介绍及上手实践

01 功能概述 本文将带大家一起实现单路、多路 MIPI CSI TX 输出、IDU 回写、IDU oneshot 模式、绑定输出 VPS 数据等功能&#xff0c;此处主要介绍各 sample 的实现与使用方法。 02 软件架构说明 本文中绑定 VPS 输出功能基于 libvio API 实现&#xff0c;调用 libvio 提供的…...

安卓窗口wms/input小知识NO_INPUT_CHANNEL剖析

背景&#xff1a; 经常在学员的vip技术群里经常有很多学员会提问一些不太常见的窗口和input的相关的问题&#xff0c;虽然不太常见&#xff0c;但确实是工作中会遇到的一些问题&#xff0c;所以马哥有必要进行一下记录这些窗口技术知识点。 具体分享技术点&#xff1a; input中…...

【2024最新版】Win10下 Java环境变量配置----适合入门小白

首先&#xff0c;你应该已经安装了 Java 的 JDK 了&#xff08;如果没有安装JDK&#xff0c;请跳转到此网址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html&#xff09; 笔者安装的是 jdk-8u91-windows-x64 接下来主要讲怎么配…...

Servlet 生命周期详解及案例演示(SpringMVC底层实现)

文章目录 什么是Servlet&#xff1f;Servlet生命周期简介1. 初始化阶段&#xff1a;init()方法示例代码&#xff1a; 2. 请求处理阶段&#xff1a;service() 和 doGet()、doPost()方法示例代码&#xff1a; 3. 销毁阶段&#xff1a;destroy()方法示例代码&#xff1a; Servlet生…...

2024 kali系统2024版本,可视化界面汉化教程(需要命令行更改),英文版切换为中文版,基于Debian创建的kali虚拟机

我的界面如下所示 1. 安装 locales sudo apt install locales 2. 生成中文语言环境 sudo locale-gen zh_CN.UTF-8 如果你希望安装繁体中文&#xff0c;可以加入&#xff1a; sudo locale-gen zh_TW.UTF-8 3. 修改 /etc/default/locale 文件 确保有以下内容 LANGzh_CN.UT…...

深入理解 CMake 中的 INCLUDE_DIRECTORIES 与 target_include_directories

在使用 CMake 构建系统时&#xff0c;指定头文件的包含路径是非常常见的一步。对于这个任务&#xff0c;CMake 提供了两种主要的命令&#xff1a;INCLUDE_DIRECTORIES 和 target_include_directories。虽然它们看似类似&#xff0c;但它们的作用范围、应用方式以及适用场景却有…...

【不知道原因的问题】java.lang.AbstractMethodError

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 遇到了一个问题&#xff1a; java.lang.AbstractMethodError 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 在Java开发中&#xff0c;java.lang.AbstractMethodError是一个常见…...

分布式篇(分布式事务)(持续更新迭代)

一、事务 1. 什么是事务 2. 事务目的 3. 事务的流程 4. 事务四大特性 原子性&#xff08;Atomicity&#xff09; 一致性&#xff08;Consistency&#xff09; 持久性&#xff08;Durability&#xff09; 隔离性&#xff08;Isolation&#xff09; 5. MySQL VS Oracle …...

[Linux] 逐层深入理解文件系统 (2)—— 文件重定向

标题&#xff1a;[Linux] 逐层深入理解文件系统 &#xff08;2&#xff09;—— 文件重定向 个人主页水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、文件的读取和写入 二、文件重定向的本质 1.手动模拟重定向的过程——把标准输出重定向到redir.txt 2.重定向…...

html+css+js实现Badge 标记

实现效果&#xff1a; 代码实现&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Badge…...

数据、信息、知识:三者有什么区别

在人工智能、知识表示和知识图谱的学习中&#xff0c;“数据”“信息”“知识”是三个最基础的概念。它们彼此相关&#xff0c;但并不相同。只有区分这三者&#xff0c;才能进一步理解&#xff1a;为什么计算机不能只存储数据&#xff0c;还需要组织信息、表达知识&#xff0c;…...

Java JDK1.9快速下载与安装指南

1. Java JDK1.9简介与下载准备 Java Development Kit&#xff08;JDK&#xff09;是Java开发的核心工具包&#xff0c;而JDK1.9作为早期版本&#xff0c;虽然现在已经不是主流选择&#xff0c;但在某些特定场景下仍然有开发者需要使用。如果你正在寻找JDK1.9的下载和安装方法&a…...

深入浅出Linux ftrace:从内核配置到实战分析(附debugfs挂载全流程)

深入浅出Linux ftrace&#xff1a;从内核配置到实战分析 在Linux系统开发与调试过程中&#xff0c;内核级追踪工具的重要性不言而喻。面对复杂的系统行为、性能瓶颈或难以复现的偶发问题&#xff0c;传统的日志和调试手段往往力不从心。ftrace作为Linux内核原生提供的轻量级追踪…...

被封杀三天后,龙虾带着“复仇版本“杀回来了

OpenClaw 4.5版本上线&#xff0c;能直接生成视频、图片和音乐。 有些故事&#xff0c;编剧都不敢这么写。 几天前&#xff0c;Anthropic对OpenClaw下了"封杀令"——只要系统提示词中出现OpenClaw的字样&#xff0c;Claude就会直接拒绝请求&#xff0c;返回一个冷冰…...

2026好用的企业知识库汇总:11款工具实测与建议

本文将深入对比11款企业知识库管理工具&#xff1a;PingCode、亿方云、ShowDoc、Baklib、语雀、Notion、蓝凌、HelpLook、印象笔记、Bloomfire、沃丰科技知识库 在信息爆炸的办公环境下&#xff0c;企业知识库已成为团队沉淀资产、提升协作效率的核心工具。面对市面上琳琅满目的…...

Java实战:通过URL调用自动化触发DolphinScheduler工作流

1. 为什么需要自动化触发工作流&#xff1f; 想象一下你负责一个电商平台的订单处理系统。每当用户下单时&#xff0c;系统需要自动触发一系列操作&#xff1a;库存扣减、支付状态更新、物流信息生成...如果每次都手动点击"运行"按钮&#xff0c;不仅效率低下&#…...

OpenClaw飞书机器人配置:SecGPT-14B安全警报实时推送

OpenClaw飞书机器人配置&#xff1a;SecGPT-14B安全警报实时推送 1. 为什么需要安全警报实时推送&#xff1f; 上周三凌晨3点&#xff0c;我的个人服务器突然收到异常登录告警。当我早上看到邮件时&#xff0c;攻击者早已完成数据窃取并抹除了痕迹。这次事件让我意识到&#…...

一文读懂 JWT 无状态身份认证的核心原理

JWT 是目前前后端分离、微服务架构中最常用的无状态身份认证方案。本文用简洁易懂的方式&#xff0c;带你快速掌握 JWT 的签发、传递与校验核心逻辑&#xff0c;轻松理解其工作原理与安全机制。 一、什么是JWT&#xff1f; JWT&#xff08;JSON Web Token&#xff09;是一种轻…...

通义千问3-4B树莓派快速部署:两种方法(llama.cpp vs Ollama)对比

通义千问3-4B树莓派快速部署&#xff1a;两种方法&#xff08;llama.cpp vs Ollama&#xff09;对比 1. 为什么选择在树莓派上部署通义千问3-4B 树莓派作为一款低成本、低功耗的单板计算机&#xff0c;近年来在边缘计算领域展现出巨大潜力。通义千问3-4B-Instruct-2507模型凭…...

MeteorSeed赐

这个代码的核心功能是&#xff1a;基于输入词的长度动态选择反义词示例&#xff0c;并调用大模型生成反义词&#xff0c;体现了 “动态少样本提示&#xff08;Dynamic Few-Shot Prompting&#xff09;” 与 “上下文长度感知的示例选择” 的能力。 from langchain.prompts imp…...