leetcode42接雨水问题

接雨水

题目描述

 

题目分析 

核心思想:

 

代码 

java版本:

package com.pxx.leetcode.trapRainWaterDoublePoniter;public class Solution1 {public int trap(int[] height) {if (height.length == 0) {return 0;}int n = height.length;int left = 0;int right = n - 1;int leftMax = height[0];int rightMax = height[n - 1];int ans = 0;//保留水通的总数的//边走边计算每一个位置while (left <= right) {leftMax = Math.max(leftMax, height[left]);rightMax = Math.max(rightMax, height[right]);//刚开始两个相等//我们的目的是找到一个最小值,然后减去当前的水通高度//数据分析:4 2 0 3 2 5//leftMax = height[0] = 4;//rightMax = height[5] = 5;//选择leftMax 因为它小,所以 ans = 4 - 4 = 0;//当前水通单位为0//既然leftMax被占据了之后,那么它就要++,因为这个桶的位置已经被计算完了left++//结束之后leftMax与rightMax已经别保留了下来,也就是leftMax = 4,rightMax = 5;//---------------------------进入循环(left(1) <= right(5))------------------------------------//判定左边最大值max(4(被上次保留的最大值),当前桶的高度=2)->leftmax = 4;//判定右边最大值max(5, 5)->rightMax = 5//这个时候是leftMax=4, 因为leftMax比较小,ans = 0(上面的水通单位,后面类推) + (4 - 2(当前水通高度) = 2)//上面就计算出当前水通能存储的水量是2 ans = 0+2;//目前占两个水通单位//保留最大值与最小值,杀入下一次循环里面,因为left又被占了,所以left又要++,right依旧保持不动//---------------------------进入循环(left(2) <= right(5))--------------------------------------//max(4, 0)->leftmax = 4//max(5, 5)->rightmax = 5//还是左边比较小,那么又杀入左边//ans = 2(上面的水桶数) + (4)(4-height[i(2)=0,4-0]) = 6;//--------------------------//改变情况简单分析//一旦左边leftMax > rightMax//就要从右边开始轮替占位了//核心思想:哪边小,哪边站位,哪边轮替if (leftMax < rightMax) {ans += leftMax - height[left];left++;} else {ans += rightMax - height[right];right--;}}return ans;}
}

 c语言版本:

#include <stdio.h>int trap(int height[], int n) {if (n == 0) {return 0;}int left = 0;int right = n - 1;int leftMax = height[0];int rightMax = height[n - 1];int ans = 0;while (left <= right) {leftMax = leftMax > height[left] ? leftMax : height[left];rightMax = rightMax > height[right] ? rightMax : height[right];if (leftMax < rightMax) {ans += leftMax - height[left];left++;} else {ans += rightMax - height[right];right--;}}return ans;
}int main() {// 示例用法int height[] = {4, 2, 0, 3, 2, 5};int n = sizeof(height) / sizeof(height[0]);int result = trap(height, n);printf("存储的水量是:%d\n", result);return 0;
}

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

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

相关文章

LabVIEWL实现鸟巢等大型结构健康监测

LabVIEWL实现鸟巢等大型结构健康监测 管理国家地震防备和减灾的政府机构中国地震局(CEA)选择了七座新建的巨型结构作为结构健康监测(SHM)技术的测试台。这些标志性建筑包括北京2008年夏季奥运会场馆&#xff08;包括北京国家体育场和北京国家游泳中心&#xff09;、上海104层的…

Eureka简单使用做微服务模块之间动态请求

创建一个eureka模块,引入eureka 为启动项加上EnableEurekaServer注解 配置信息 orderService和userService的操作是一样的 这里以orderService为例: 引入eureka客户端 加上 LoadBalanced注解 配置 orderService和userService都配置好了之后 启动 这样我们在http://localhos…

Python实现FA萤火虫优化算法优化循环神经网络分类模型(LSTM分类算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法&#xff08;Fire-fly algorithm&#xff0c;FA&#xff09;由剑桥大学Yang于2009年提出 , …

【读懂AUTOSAR】DoIP模块(1)-- 使用场景和链接的建立规范

引子 --什么是?为什么使用DoIP? DoIP就是通过IP进行诊断的意思(Diagnostic Over IP)。我们熟悉的诊断都是通过CAN总线的啊,为什么要通过IP?IP是什么? IP就是Internet Protocol,就是”互联网协议“啦! 那DoIP就是通过互联网进行的诊断喽,也可以叫做“基于以太网的诊…

uni-app中的onLoad不执行

问题 想在onLoad()中发请求获取数据&#xff0c;却发现onLoad()根本不会执行 原因 这个页面没有在pages.json中配置&#xff0c;不属于uni-app中的页面 uni-app的文档也做出了说明&#xff0c;组件是无法使用页面级的onLoad等生命周期的 解决方法 uni-app除支持页面生命周…

单片机学习11——矩阵键盘

矩阵键盘&#xff1a; 这个矩阵键盘可以接到P0、P1、P2、P3都是可以的。 使用矩阵键盘是能节省单片机的IO口。 P3.0 P3.1 P3.2 P3.3 称之为行号。 P3.4 P3.5 P3.6 P3.7 称之为列号。 矩阵键盘检测原理&#xff1a; 1、检查是否有键按下&#xff1b; 2、键的抖动处理&#xf…

阿里云服务器购买价格,云服务器与轻量应用服务器最新购买活动价格汇总

阿里云服务器租用价格是多少&#xff1f;不同时期阿里云服务器的租用价格不同&#xff0c;目前阿里云轻量应用服务器与云服务器优惠价格也有所变化&#xff0c;目前轻量应用服务器还是87元1年起&#xff0c;经济型e实例云服务器99元1年起&#xff0c;通用算力型u1云服务器643.6…

共创良好办公环境

职场安全请记牢&#xff0c;生命财产第一要 严禁吸烟&#xff1a;为避免火灾隐患&#xff0c;办公区域严禁吸烟&#xff0c;如吸烟请移步大厦一楼吸烟区。请勿为陌生人开门&#xff1a;为避免陌生人进入职场&#xff0c;产生人身及财产安全隐患&#xff0c;请勿为陌生人打开公司…

Flink CDC -Sqlserver to Sqlserver java 模版编写

1.基本环境 <flink.version>1.17.0</flink.version> 2. 类文件 package com.flink.tablesql;import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.flink.streaming.api.environment.StreamExecutionEnviro…

护眼灯值不值得买?国AA级别标准的护眼台灯推荐

在中国&#xff0c;近视人口占全国总人数的30%左右。中全国患近视眼的总数达到3.6亿。城市近视人口的近视率达到33%。其中&#xff0c;大学生的近视率是最高的&#xff0c;达到了75&#xff05;左右。中学生的近视率大约为50&#xff05;。在校佩戴眼镜的小学生比例为30&#x…

开始使用Spring Boot Admin吧-使用Nacos注册SBA

什么是 Spring Boot Admin&#xff08;SBA&#xff09;? Spring Boot Admin 是 codecentric 公司开发的一款开源社区项目&#xff0c;目标是让用户更方便的管理以及监控 Spring Boot 应用。 应用可以通过我们的Spring Boot Admin客户端&#xff08;通过HTTP的方式&#xff0…

GaussDB数据库SQL系列-触发器

目录 一、前言 二、触发器概念 三、GaussDB数据库中的触发器 1、语法格式 2、创建步骤 3、注意事项 4、附&#xff1a;表和视图上支持的触发器种类 四、GaussDB数据库中的示例 示例一、在GaussDB数据库中创建一个触发器&#xff0c;以便在插入新记录时自动将记录的创建…

论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools

论文笔记--Toolformer: Language Models Can Teach Themselves to Use Tools 1. 文章简介2. 文章概括3 文章重点技术3.1 Toolformer3.2 APIs 4. 文章亮点5. 原文传送门 1. 文章简介 标题&#xff1a;Toolformer: Language Models Can Teach Themselves to Use Tools作者&#…

堆详解(C语言实现)

文章目录 写在前面1. 堆的概念和性质1.1 堆的概念1.2 堆的性质 2 堆的实现2.1 堆结构的定义2.2 堆的初始化2.3 堆的插入2.3.1 向上调整算法2.3.2 堆的插入元素过程 2.4 堆的删除2.4.1 向下调整算法2.4.2 堆的删除元素过程 2.5 获取堆顶元素2.6 获取堆元素个数2.7 判断堆是否为空…

vscode代码调试配置

C/C代码调试 点击 vscode左侧的 run and debug&#xff0c;新建launch.json 和 tasks.json&#xff0c;并进行配置如下 launch.json 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 { // Use IntelliSense to learn ab…

STM32H7 RTC及PC13问题

程序加了RTC时间过后&#xff0c;发现原本的RTC定时唤醒中断也不好使了&#xff0c;开始以为是PC13入侵检测引脚问题&#xff0c;经过测试&#xff0c;发现了一个大问题&#xff0c;当使用 HAL_RTC_SetTime(&hrtc, &time, RTC_FORMAT_BCD); 函数后&#xff0c;RTC变得…

Nano文本编辑器

目录 一、概述 1.1、起源 二、安装 2.1、Centos系统 2.2、Debian / Ubuntu 系统 三、基本操作 3.1、光标移动和选择文本 3.2、插入和删除文本 3.3、保存和退出文件 3.4、搜索和替换文本 四、配置Nano 4.1、修改Nano的配置文件 4.2、自定义快捷键 4.3、更改外观和…

Spring Security 6.x 系列(6)—— 显式设置和修改登录态信息

一、前言 此篇是对上篇 Spring Security 6.x 系列&#xff08;5&#xff09;—— Servlet 认证体系结构介绍 中4.9章节显式调用SecurityContextRepository#saveContext进行详解分析。 二、设置和修改登录态 2.1 登录态存储形式 使用Spring Security框架&#xff0c;认证成功…

opencv安装过程与问题解决

主流程看这篇文章Ubuntu下Opencv的安装&#xff08;亲测有效&#xff0c;超级简单&#xff01;&#xff09; 但是里面的cmake用我这里的&#xff0c;不然安装后会dpkg会找不到opencv sudo cmake -D CMAKE_BUILD_TYPERelease -D CMAKE_INSTALL_PREFIX/usr/local -D OPENCV_GEN…

使用 ChatGPT 创建 Makefile 构建系统:从 Docker 开始

使用 Docker 搭配 ChatGPT 创建 Makefile 构建系统 Makefile 构建系统是嵌入式软件团队实现其开发流程现代化的基础。构建系统不仅允许开发人员选择各种构建目标&#xff0c;还可以将这些构建集成到持续集成/持续部署 (CI/CD) 流程中。使用诸如 ChatGPT 这样的人工智能 (AI) 工…