Leecode42:接雨水

2024-05-08 19:20
文章标签 雨水 leecode42

本文主要是介绍Leecode42:接雨水,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一反应是按照高低这个思路来求解,因为可以把盛雨水的容器想成是从左往右的,遇到一个沟就存一点雨水。

这个思路

看了下题解,发现自己的思路其实没问题,确实是按照最高最低来求,但是这个地方太复杂了求的,每一格单独求才现实。

修改后成功ac,主要注意两点:一是最左端别忘记取,二是别忽视了可能中间的这个是最高的,导致不加一个判断条件的话会导致每列都被计算从而出现负值。

这个方法的时间复杂度为O(N2),空间复杂度为O(1)。

方法2:动态规划

这个方法和上面的思路不太一样,有点“以空间换时间”的感觉,它的时间复杂度为O(N),空间复杂度为O(N),ac代码如下:

方法3:双指针

这边就是因为很多left_max和right_max都不会被用到。所以实际上一个未知数就可以存储结果了(每次判断当前的值和之前的值是否有区别)。这里有问题是没有明白动态规划的思想(即从前往后、从后往前,这里都是从前往后所以就是错误的)。

height [ left - 1] 是可能成为 max_left 的变量, 同理,height [ right + 1 ] 是可能成为 right_max 的变量。

只要保证 height [ left - 1 ] < height [ right + 1 ] ,那么 max_left 就一定小于 max_right。

因为 max_left 是由 height [ left - 1] 更新过来的,而 height [ left - 1 ] 是小于 height [ right + 1] 的,而 height [ right + 1 ] 会更新 max_right,所以间接的得出 max_left 一定小于 max_right。

反之,我们就从右到左更。

下面的错因:记住,值的判断之和left、right位置的有关,而和i无关!!

下面是使用双指针法的ac代码,这里的时间复杂度为O(N),空间复杂度为O(1)。

这篇关于Leecode42:接雨水的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971208

相关文章

力扣接雨水

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

力扣面试经典算法150题:接雨水

接雨水 今天的题目是力扣面试经典算法150题中的困难难度数组题目:分发糖果。 题目链接:https://leetcode.cn/problems/trapping-rain-water/description/?envType=study-plan-v2&envId=top-interview-150 题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱

牛客笔试,牛客.四个选项(dfs巨难)牛客.接雨水动态规划单调栈解法牛客.栈和排序牛客.加减

目录 牛客.四个选项(dfs巨难) 牛客.接雨水 动态规划 单调栈解法 牛客.栈和排序 牛客.加减 牛客.四个选项(dfs巨难)   刚开始我是想着用数学,Cxx去解决,但是他的还有其余条件,就没有办法解决,所以就枚举 ,递归的数据量不大时候,是推荐使用的 import java.util.*;// 注意类名必须为 Main, 不要有任何 packag

[Algorithm][综合训练][四个选项][接雨水]详细讲解

目录 1.四个选项1.题目链接2.算法原理详解 && 代码实现 2.接雨水1.题目链接2.算法原理详解 && 代码实现 1.四个选项 1.题目链接 四个选项 2.算法原理详解 && 代码实现 解法:DFS(暴搜) + 剪枝 + Hash 剪枝: 填某个数的时候,要看看还有没有剩余次数填某个数的时候,符不符合若干题的选项必须相同 #include <iostr

【NO.16】LeetCode经典150题-42. 接雨水

文章目录 【NO.16】LeetCode经典150题-42. 接雨水解题:动态规划 【NO.16】LeetCode经典150题-42. 接雨水 42. 接雨水 【困难】【HOT100】 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例1 : 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1

day49 | 42. 接雨水 84. 柱状图中最大的矩形

代码随想录算法训练营第 49 天| 42. 接雨水 84. 柱状图中最大的矩形 Leetcode 42. 接雨水 题目链接:https://leetcode.cn/problems/trapping-rain-water/description/ 题目描述: 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:hei

海绵城市雨水监测系统

海绵城市雨水监测系统主要有:数据采集、无线数据传输、后台云服务、终端平台显示等部分组成。系统通过前端数据采集水质(ss\cod\浊度、PH等)、雨水雨量、流量、水位、土壤湿度、气象等数据。通过无线数据传输通讯(4G、5G、以太网、北斗等)上传至后台云服务器系统,云服务系统,负责对数据和视频图像的接收、记录、处理、存储、转发,最后在监测终端显示(包括手机终端和电脑网页终端,支持对海绵办、环保、水利等

Leetcode42接雨水(单调栈)

题目 题目链接 解法一 求出前缀最大和后缀最大,用两者较小值减去当前高度,累加即可,这个思路容易想到,这里不赘述 class Solution {public:int trap(vector<int>& height) {vector<int> preMx(height.size()), postMx(height.size());int mx = 0;for (int i = 0; i

解锁SQL无限可能 | 如何利用SQL求解力扣难题接雨水问题?

目录 1  需求描述 1 数据准备 2 问题分析 3 小结 1  需求描述 原文链接:42. 接雨水 - 力扣(LeetCode) 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,

leetcode题解-接雨水问题

文章目录 问题描述问题抽象问题关键点分析思路一思路二结束语 雨纷纷,旧故里草木深。 我听闻,你始终一个人。 今天忘忧跟大家一起探索一个跟雨水有关的算法,题目来源leetcode。 问题描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。下面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在