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

【前缀和】42. 接雨水

本文涉及知识点

C++算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频

LeetCode42. 接雨水

给定 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 = [4,2,0,3,2,5]
输出:9

提示:
n == height.length
1 <= n <= 2 * 104
0 <= height[i] <= 105

枚举

vWater[i] 记录 第i个柱子水的高度。
令 leftMax =max(height[0…i-1])
rightMax = max(height[i+1…])
如果水高于 leftMax 或 rightMax,水会流走。故水的高度为:min(leftMax,rightMax) - height[i]
结果为负,则为0。
更改leftMax为max(height[0…i]),rightMax类似。则不需要考虑负数。
时间复杂度:O(n)

代码

核心代码

class Solution {
public:int trap(vector<int>& height) {const int n = height.size();vector<int> vLeft = height;for (int i = 1; i < n; i++) {vLeft[i] = max(vLeft[i], vLeft[i - 1]);}int iRightMax = 0;int iRet = 0;for (int i = n - 1; i >= 0; i--) {iRightMax = max(iRightMax, height[i]);const int iWater = min(iRightMax, vLeft[i]);iRet += iWater - height[i];}return iRet;}
};

单元测试

template<class T1,class T2>
void AssertEx(const T1& t1, const T2& t2)
{Assert::AreEqual(t1 , t2);
}template<class T>
void AssertEx(const vector<T>& v1, const vector<T>& v2)
{Assert::AreEqual(v1.size(), v2.size());	for (int i = 0; i < v1.size(); i++){Assert::AreEqual(v1[i], v2[i]);}
}template<class T>
void AssertV2(vector<vector<T>> vv1, vector<vector<T>> vv2)
{sort(vv1.begin(), vv1.end());sort(vv2.begin(), vv2.end());Assert::AreEqual(vv1.size(), vv2.size());for (int i = 0; i < vv1.size(); i++){AssertEx(vv1[i], vv2[i]);}
}namespace UnitTest
{vector<int> height;TEST_CLASS(UnitTest){public:TEST_METHOD(TestMethod0){	height = { 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 };auto res = Solution().trap(height);AssertEx(6,res);}TEST_METHOD(TestMethod1){height = { 4, 2, 0, 3, 2, 5 };auto res = Solution().trap(height);AssertEx(9, res);}};
}

扩展阅读

视频课程

有效学习:明确的目标 及时的反馈 拉伸区(难度合适),可以先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

相关下载

想高屋建瓴的学习算法,请下载《喜缺全书算法册》doc版
https://download.csdn.net/download/he_zhidan/88348653

我想对大家说的话
《喜缺全书算法册》以原理、正确性证明、总结为主。
闻缺陷则喜是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

http://www.lryc.cn/news/360247.html

相关文章:

  • 我的名字叫大数据
  • 数据库漫谈-infomix
  • 【Qt】Qt界面美化指南:深入理解QSS样式表的应用与实践
  • 七彩云南文化旅游网站的设计
  • 7-zip安装教程
  • oracle 12c DB卸载流程
  • Docker学习笔记 - 创建自己的image
  • java web爬虫
  • MySQL开发教程和具体应用案例
  • QT C++ 模型视图结构 QTableView 简单例子
  • 2024年3月电子学会Python编程等级考试(四级)真题题库
  • 深入分析 Android BroadcastReceiver (一)
  • 2024医美如何做抖音医美抖音号,本地团购、短视频直播双ip爆品引流,实操落地课
  • Debian常用指令指南:高效管理你的Linux系统
  • 什么是DELINS交货指示?
  • 基于Open3D的点云处理24-ICP匹配cuda加速
  • UE_地编教程_创建地形洞材质
  • 「C系列」C 基本语法
  • java期末细节知识整理(一)
  • GIt快速入门(一文学会使用Git)
  • 电机测试方法的介绍与功能实现(T测试方法)
  • 多线程和多进程的快速入门
  • 【TensorFlow深度学习】经典卷积网络架构回顾与分析
  • Salesforce推出Einstein 1 Studio:用于自定义Einstein Copilot并将人工智能嵌入任何CRM应用程序的低代码人工智能工具
  • 点赋科技:建设智能饮品高地,打造数字化产业先锋
  • ORACLE RAC的一些基本理论知识
  • CMake的作用域:public/private/interface
  • 设计模式基础知识点(七大原则、UML类图)
  • Android开机动画的结束过程BootAnimation(基于Android10.0.0-r41)
  • 微软远程连接工具:Microsoft Remote Desktop for Mac 中文版