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

LeetCode 接雨水 双指针

原题链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题面:

给定 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 * 10^4
  • 0 <= height[i] <= 10^5

解题思路:

由木桶理论可知某一列的储水量与他左边最高的柱子和右边最高的柱子之间的较矮者有关,为这一列高度和它的差值。在上一篇博客,我们使用了DP方法,维护了两个数组left和right,空间复杂度为O(n),但实际上我们可以使用双指针法,空间复杂度可以优化到O(1)。

设左指针left,右指针right,当left和right未相遇时,维护leftMax和rightMax,左指针left只从左往右,右指针right只从右往左,leftMax = max(leftMax, height[left]),rightMax = max(rightMax, height[right])。

当leftMax < rightMax时,我们可以计算出left位置的储水量为leftMax - height[left],并将left右移一位;

当leftMax > rightMax时,我们可以计算出right位置的储水量为rightMax - height[right],并将right左移一位;

当leftMax == rightMax时,无论对left操作还是对right操作都是可以的。

当left和right相遇时,就可以结束计算了。

代码(CPP):

class Solution {
public:/*双指针,将空间复杂度从O(n)优化至O(1)*/int trap(vector<int>& height) {int n = height.size();int left = 0, right = n - 1;int leftMax = 0, rightMax = 0, ans = 0;while (left < right) {leftMax = max(leftMax, height[left]);rightMax = max(rightMax, height[right]);if (leftMax < rightMax) {ans += leftMax - height[left];left++;} else {ans += rightMax - height[right];right--;}}return ans;}
};

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

相关文章:

  • 【Linux】【网络】传输层协议:UDP
  • 数字音频工作站FL Studio 21中文版下载及电音编曲要用乐理吗 电音编曲步骤
  • 金蝶云星空与旺店通·企业奇门对接集成其他出库查询打通创建其他出库单
  • Visual Studio 如何删除多余的空行,仅保留一行空行
  • java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展
  • 112. 路径总和
  • 国货疯抢流量,B站接连爆发800万播放实现破圈
  • (高阶) Redis 7 第14讲 数据统计分析 实战篇
  • SpringCloud nacos1.x.x版本升级到2.2.3版本并开启鉴权踩坑
  • 软件测试/测试开发丨探索AI与测试报告的完美结合,提升工作效率
  • Ubuntu 设置开机自动执行脚本
  • 【笔记】Splay
  • opencv英文识别tesseract-orc安装
  • JNA封装C/C++动态库在flink内使用记录
  • Android gradle dependency tree change(依赖树变化)监控实现
  • 5个流程图模板网站,帮你轻松绘制专业流程图
  • 【AI视野·今日Robot 机器人论文速览 第四十二期】Wed, 27 Sep 2023
  • 后端面试关键问题大总结
  • uni-app:实现图片周围的图片按照圆进行展示
  • Django之视图
  • 【软件工程_设计模式】——为什么要使用设计模式?
  • 大数据之Kafka
  • 灵活运用OSI模型提升排错能力
  • 【最新!企知道AES加密分析】使用Python实现完整解密算法
  • 前端架构师之11_JavaScript事件
  • 文本过滤工具:grep
  • 【Linux】生产者和消费者模型
  • 开发APP的费用是多少
  • start()方法源码分析
  • VUE_history模式下页面404错误