博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Leetcode] Trapping Rain Water
阅读量:6252 次
发布时间:2019-06-22

本文共 2011 字,大约阅读时间需要 6 分钟。

Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

For example, 

Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.

The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!

仔细想想感觉这道题应该是扫一遍就能得到结果的。。。对某个值A[i]来说,能trapped的最多的water取决于在i之前最高的值leftMostHeight[i]和在i右边的最高的值rightMostHeight[i](均不包含自身)。如果min(left,right) > A[i],那么在i这个位置上能trapped的water就是min(left,right) – A[i]。有了这个想法就好办了,第一遍从左到右计算数组leftMostHeight,第二遍从右到左计算rightMostHeight。时间复杂度是O(n)。

1 class Solution { 2 public: 3     int trap(int A[], int n) { 4         int maxHeight = 0; 5         vector
leftMostHeight(n, 0); 6 for (int i = 0; i < n; ++i) { 7 leftMostHeight[i] = maxHeight; 8 maxHeight = (maxHeight > A[i]) ? maxHeight : A[i]; 9 }10 maxHeight = 0;11 vector
rightMostHeight(n, 0);12 for (int i = n - 1; i >= 0; --i) {13 rightMostHeight[i] = maxHeight;14 maxHeight = (maxHeight > A[i]) ? maxHeight : A[i];15 }16 int water = 0, height;17 for (int i = 0; i < n; ++i) {18 height = min(leftMostHeight[i], rightMostHeight[i]) - A[i];19 water += (height > 0) ? height: 0;20 }21 return water;22 }23 };

 下面是扫一遍的代码:

1 class Solution { 2 public: 3     int trap(int A[], int n) { 4         int left = 0, right = n - 1; 5         int height = 0, res = 0; 6         while (left < right) { 7             if (A[left] < A[right]) { 8                 height = max(height, A[left]); 9                 res += height - A[left];10                 ++left;11             } else {12                 height = max(height, A[right]);13                 res += height - A[right];14                 --right;15             }16         }17         return res;18     }19 };

 

 

转载地址:http://fpysa.baihongyu.com/

你可能感兴趣的文章
如何更好地对齐分区??
查看>>
使用Python从rds上下载mysql备份文件
查看>>
react native组件的创建
查看>>
批量删除文件
查看>>
Linux网络管理
查看>>
iOS JSPatch 热修复使用
查看>>
某二级行机房搬迁
查看>>
基于MVC+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts
查看>>
vs2015 xamarin 添加智能感知
查看>>
call to member function bind_param() on boolean...........
查看>>
刘启成_补充知识:awk:报告生成器
查看>>
Linux LVM逻辑卷配置过程详解
查看>>
【技术分享】VSAN如何处理磁盘或主机故障
查看>>
OS快捷键
查看>>
linux内核中Kconfig和Makefile 详解
查看>>
ASP.NET 使用List<T>.Remove 不生效
查看>>
Nginx的第三方模块ngx-fancyindex安装
查看>>
TCP有限状态机
查看>>
XenServer常用Debug问题的命令介绍
查看>>
算法分析-快速排序QUICK-SORT
查看>>