【LeetCode最详尽解答】42-接雨水 Trapping-Rain-Water

embedded/2024/10/25 18:25:02/

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家!

链接:

  • 42-接雨水

直觉

通过可视化图形来解决这个问题会更容易理解和解决。

给定输入: 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 个单位的雨水被困住。

Trapping-Rain-Water

最初,我尝试同时移动左指针和右指针,但在到达右半部分 [3,2,1,2,1] 时遇到了问题。这时,左指针指向值 3,而右指针指向数组的末尾。右边界值小于左边界值,无法形成雨水陷阱。

这是错误的解决方案:

python">class Solution(object):def trap(self, height):""":type height: List[int]:rtype: int"""l = 0 r = 1area = 0while l < r and r < len(height)-1 :while height[r] < height[l] and r < len(height)-1 :r+=1for i in range(l+1,r):area+=height[l] -height[i]l = rr = l +1return area

然后,我观看了 NeetCode 的视频,他将左右指针分别初始化为数组的起始和结束位置。此外,还使用了两个变量 leftmaxrightmax。每次移动较小的值并将当前面积累加到最终结果中。如果 rightmax 较小,它会向左移动,因为无法从左指针陷阱雨水,并加上当前面积值 rightmax - height[r]。相反,如果 leftmax 较小,则加上面积值 leftmax - height[l] 并向右移动检查下一个值。

方法

  • 初始化两个指针 leftright,分别位于数组的起始和结束位置。
  • 初始化 leftmaxrightmax 为起始和结束位置的值。
  • 移动较小的值并更新最大值,将面积值累加到最终结果中。

复杂度

  • 时间复杂度:
    O ( n ) O(n) O(n)

    • 我们遍历数组一次,因此时间复杂度是线性的。
  • 空间复杂度:
    O ( 1 ) O(1) O(1)

    • 无论输入大小如何,我们只使用常量数量的额外空间。

代码

python">class Solution(object):def trap(self, height):""":type height: List[int]:rtype: int"""l = 0r = len(height)-1leftmax = height[l]rightmax = height[r]res = 0while l < r:if leftmax < rightmax:l+=1leftmax = max(leftmax, height[l])res += leftmax - height[l]else:r-=1rightmax = max(rightmax, height[r])res += rightmax - height[r]return res

http://www.ppmy.cn/embedded/50255.html

相关文章

C++中的备忘录模式

目录 备忘录模式&#xff08;Memento Pattern&#xff09; 实际应用 文本编辑器的撤销功能 游戏角色状态保存和恢复 图形编辑器的撤销/重做功能 总结 备忘录模式&#xff08;Memento Pattern&#xff09; 备忘录模式是一种行为型设计模式&#xff0c;它允许在不破坏封装…

Leetcode面试经典150题

汇总区间 class Solution { public:vector<string> summaryRanges(vector<int>& nums) {int n nums.size();if (n 0) {return {};}vector<string> res;string str to_string(nums[0]);int start nums[0];int gap 1;for (int i 1; i < n; i) {i…

AI导航网

文章目录 1、[AI导航网](https://www.ainav.cn/) 1、AI导航网 https://www.ainav.cn/

相似性搜索揭秘:向量嵌入与机器学习应用

引言 在当今数据驱动的世界中&#xff0c;有效地检索和利用信息是一项关键挑战。在数据库、搜索引擎和众多应用程序中&#xff0c;寻找相似数据是一项基本操作。传统数据库中&#xff0c;基于固定数值标准的相似项搜索相对直接&#xff0c;通过查询语言即可实现&#xff0c;如…

6.14作业

使用手动连接&#xff0c;将登录框中的取消按钮使用第二中连接方式&#xff0c;右击转到槽&#xff0c;在该槽函数中&#xff0c;调用关闭函数&#xff0c;将登录按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"…

Python面试宝典:Python中与常用的机器学习库相关的面试笔试题(1000加面试笔试题助你轻松捕获大厂Offer)

Python面试宝典:1000加python面试题助你轻松捕获大厂Offer【第二部分:Python高级特性:第二十六章:Python与数据科学:第三节:Python中常用的机器学习库】 第二十六章:Python与数据科学第三节:Python中常用的机器学习库1. Scikit-learn2. TensorFlow3. PyTorch4. Keras5.…

Flutter图像编辑器应用:创造生动美丽的照片体验

介绍 引言 想象一下&#xff0c;在一个阳光明媚的下午&#xff0c;与家人或朋友漫步在风景如画的街道上。拿出手机&#xff0c;迫不及待地捕捉这一刻的美好&#xff0c;按下快门&#xff0c;留下了一张充满回忆的照片。 然而&#xff0c;回到家后发现照片的亮度有些偏暗&…

Web前端开发的过程:深入剖析与精彩演绎

Web前端开发的过程&#xff1a;深入剖析与精彩演绎 在数字化时代&#xff0c;Web前端开发作为构建用户界面的关键环节&#xff0c;其重要性不言而喻。这一过程涉及众多技术细节和创意构思&#xff0c;充满了挑战与机遇。本文将从四个方面、五个方面、六个方面和七个方面&#…