☆【前后缀】【双指针】Leetcode 42. 接雨水

【前后缀】【双指针】Leetcode 42. 接雨水

    • 解法1 前后缀分解
    • 解法2 双指针

---------------🎈🎈42. 接雨水 题目链接🎈🎈-------------------

解法1 前后缀分解

在这里插入图片描述

维护一个前缀(左侧最高)后缀(右侧最高)数组
把每一个小区间看做一个桶,桶的容量取决于左右壁中最低的那一个Min(leftmax,rightmax)
左壁就是当前这块及其左侧高度的最大值:前缀 leftmax
右壁就是当前这块及其右侧高度的最大值:后缀 rightmax
最终能装的水 = 当前小桶的容量-当前小柱子高度

时间复杂度O(N)
空间复杂度O(N)

class Solution {public int trap(int[] height) {// 把每一个小区间看做一个桶,桶的容量取决于左右壁中最低的那一个Min(leftmax,rightmax)// 左壁就是当前这块及其左侧高度的最大值:前缀 leftmax// 右壁就是当前这块及其右侧高度的最大值:后缀 rightmax// 能装的水 = 桶容量-柱子高度int[] leftmax = new int[height.length]; // 左边的最大高度int[] rightmax = new int[height.length]; // 右边的最大高度int templeftmax = 0;for(int i = 0; i < height.length;i++){ // 前缀数组if(height[i] > templeftmax){templeftmax = height[i];}leftmax[i] = templeftmax;}int temprightmax = 0;for(int i = height.length-1; i >=0;i--){ // 后缀数组if(height[i] > temprightmax){temprightmax = height[i];}rightmax[i] = temprightmax;}int totalWater = 0;// 同时遍历前后缀数组,两者取取Min即为桶内可以容纳的高度。之后减去筒高度即为水的高度,累加即可for(int i = 0; i< height.length; i++){totalWater += Math.min(leftmax[i],rightmax[i])-height[i];}return totalWater;}
}   

解法2 双指针

在这里插入图片描述
多做做吧 不行就看看动图

双指针法👿
while(left<right)
每次更新前缀最大值和后缀最大值
⭐️当 前缀最大值 < 后缀最大值时:当前的桶容量肯定为前缀最大值
⭐️当 后缀最大值 < 前缀最大值时:当前的桶容量肯定为后缀最大值

之后就更新totalwater = 当前桶容量- 底部高度即可

时间复杂度O(N)
空间复杂度O(1)
⭐️⭐️

class Solution {public int trap(int[] height) {int totalWater = 0;// 初始化双指针 一个指头一个指尾int left = 0;int right = height.length-1;// 前缀最大值和后缀最大值int preMax =0;int backMax = 0;// 双指针left< right遍历while(left < right){// 更新前缀最大值和后缀最大值preMax = Math.max(preMax, height[left]);backMax = Math.max(backMax, height[right]);// 1.当:前缀最大值 小于 后缀最大值:说明桶容量一定为前缀最大值!!!if(preMax < backMax){totalWater += (preMax-height[left]);  // 计算totalwater = 桶容量-柱子高度left++;}// 2.当:后缀最大值 小于 前缀最大值:说明桶容量一定为后缀最大值!!!if(preMax >= backMax){totalWater += (backMax-height[right]);  // 计算totalwater = 桶容量-柱子高度right--;}// 3.前缀最大值和后缀最大值相等的时候,随便归入一类就行}return totalWater;}
}

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

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

相关文章

【Linux系统编程(进程编程)】进程的退出:父进程等待子进程的退出之僵尸进程与孤儿进程

文章目录 一、进程退出1.1、进程正常退出方式1.2、异常退出 二、父进程等待子进程退出&#xff08;一&#xff09;2.1、为什么要等待子进程退出2.2、&#xff08;1&#xff09;父进程等待子进程退出并收集子进程的退出状态如何等待wstatus空wstatus非空 2.3、&#xff08;2&…

LeetCode---389周赛

题目列表 3083. 字符串及其反转中是否存在同一子字符串 3084. 统计以给定字符开头和结尾的子字符串总数 3085. 成为 K 特殊字符串需要删除的最少字符数 3086. 拾起 K 个 1 需要的最少行动次数 一、字符串及其反转中是否存在同一子字符串 直接暴力枚举即可&#xff0c;代码…

【PHP + 代码审计】数组函数

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

力扣面试150 x 的平方根 二分 换底法 牛顿迭代法 一题多解

Problem: 69. x 的平方根 思路 &#x1f468;‍&#x1f3eb; 参考题解 &#x1f496; 袖珍计算器算法 class Solution {public int mySqrt(int x){if (x 0)return 0; // Math.exp(3)&#xff1a;e的三次方int ans (int) Math.exp(0.5 * Math.log(x));return (long) (an…

配置环境安装包遇到的问题

1. error: could not install packages due to an oserror: [errno 28] no space left on device 说是磁盘占用过多&#xff0c;查看磁盘占用情况。 df -h 果然占比100% 清理了众多缓存.cache都不行&#xff0c;而且其他利用率很低&#xff0c;可能是pip install的过程中使…

qt 实现 轮播图效果,且还有 手动 上一页和下一页 已解决

QT中有 轮播图的需求&#xff0c;按照正常html版本 。只需要配置数组就能搞定&#xff0c;但是c qt版本 应该用什么了。 第一想到的是采用定时器。 // 定时器初始化{m_pTime new QTimer(this);m_pTime->start(4 * 1000);//启动定时器并设置播放时间间隔m_pAutoFlag true;/…

【python】python turtle绘制坤坤打球

一、效果图&#xff1a; 二、准备工作 &#xff08;1)、导入必要的模块&#xff1a; 代码首先导入了需要使用的模块&#xff1a;requests、lxml和csv。 import requests from lxml import etree import csv 如果出现模块报错 进入控制台输入&#xff1a;建议使用国内镜像源 p…

智慧公厕:跨界融合,打造智慧城市新名片

随着城市化进程的不断加快&#xff0c;公共厕所建设成为一个亟待解决的问题。传统的公厕存在着管理繁琐、卫生差、服务不到位等一系列问题&#xff0c;与城市发展的节奏不协调。为此&#xff0c;推进新型智慧公厕建设成为了一个重要的解决方案。智慧公厕的建设需要推进技术融合…

【论文精读】VIT:vision transformer论文

相关文章 【论文精读】Transformer&#xff1a;Attention Is All You Need 文章目录 相关文章一、文章概览&#xff08;一&#xff09;研究背景&#xff08;二&#xff09;核心思路&#xff08;三&#xff09;相关工作&#xff08;三&#xff09;文章结论 二、模型细节&#x…

【MySQL系列】优化数据库时区设置,确保数据一致性与准确性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

图论基础|深度优先dfs、广度优先bfs

dfs 与 bfs 区别 提到深度优先搜索&#xff08;dfs&#xff09;&#xff0c;就不得不说和广度优先搜索&#xff08;bfs&#xff09;有什么区别 先来了解dfs的过程&#xff0c;很多录友可能对dfs&#xff08;深度优先搜索&#xff09;&#xff0c;bfs&#xff08;广度优先搜索…

鸿蒙Harmony应用开发—ArkTS-@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

上文所述的装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二…

MySQL--select count(*)、count(1)、count(列名) 的区别你知道吗?

MySQL select count(*)、count(1)、count(列名) 的区别&#xff1f; 这里我们先给出正确结论&#xff1a; count(*)&#xff0c;包含了所有的列&#xff0c;会计算所有的行数&#xff0c;在统计结果时候&#xff0c;不会忽略列值为空的情况。count(1)&#xff0c;忽略所有的列…

AtCoder Beginner Contest 346

A. Adjacent Product(循环) 题意 给出 N N N个数字 A 1 , A 2 , … , A N A_1, A_2, \ldots, A_N A1​,A2​,…,AN​。定义 B i A i A i 1 ( 1 ≤ i ≤ N − 1 ) B_i A_i \times A_{i 1}(1 \le i \le N - 1) Bi​Ai​Ai1​(1≤i≤N−1)。 请你打印 B 1 , B 2 , … , B …

javase day09笔记

第九天课堂笔记 构造方法★★★★ 完成对属性赋值构造方法的名字必须与类名一致没有返回值类型public 类名&#xff08;【参数】&#xff09;{ }构造方法在创建对象时同步执行没写无参构造&#xff0c;系统默认提供写了构造方法&#xff0c;系统不再提供构造方法:重载 引用数…

牛客NC108 最大正方形【中等 动态规划 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e 思路 动态规划: 先初始化第一行和第一列。然后其他单元格依赖自己的上边&#xff0c;左边和左上角参考答案Java import java.util.*;public class Solution {/*** 代码中的类…

Naive UI:一个 Vue 3 组件库,比较完整,主题可调,使用 TypeScript,快有点意思。

在当今的前端开发领域&#xff0c;Vue 3已成为中后台应用的首选框架。为了满足开发者的需求&#xff0c;各种组件库如雨后春笋般涌现。其中&#xff0c;Naive UI以其独特的优势&#xff0c;成为了Vue 3开发者的得力助手。本文将深入探讨Naive UI的特性、优势以及如何使用它来提…

docker镜像安装空间不足no space left on device

报错&#xff1a;Error processing tar file(exit status 1): open /usr/local/lib/libmkl_tbb_thread.so.1: no space left on device 原先docker模型保存位置&#xff1a; docker info -f ‘{{ .DockerRootDir}}’ docker 高点版本&#xff0c;这里26.0 解决参考&#xf…

学习次模函数-第1章 引言

许多组合优化问题可以被转换为集合函数的最小化&#xff0c;集合函数是在给定基集合的子集的集合上定义的函数。同样地&#xff0c;它们可以被定义为超立方体的顶点上的函数&#xff0c;即&#xff0c;其中是基集合的基数-它们通常被称为伪布尔函数[27]。在这些集合函数中&…

Linux 创建交换空间

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…