42. 接雨水
解析:
还是一道很经典的扫描线题目,和这一道类似盛最多水的容器 - WTSRUVF - 博客园
只不过增加了实体(按无实体算,减去实体就ok),增加了求总和
求总和打乱顺序就不好了,双指针从前往后,从后往前,每次找到高度大于等于1、2、3、4、5·····的左右两个下标求每层的面积就好了
所以这题有几个好的点
1、增加实体->按无实体算,减去实体
2、按每层求面积,这样就可以在不打乱顺序的情况下,遍历两边就可以知道每个扫描线交叉的最远的两个下标
class Solution { public: int trap(vector<int>& height) { int l = 0; int n = height.size(); int r = n - 1; int h = 0; int ret = 0; while (l <= r) { h++; while (l <= r && height[l] < h) { l++; } while (l <= r && height[r] < h) { r--; } ret += r - l + 1; } int sum = 0; for (int i = 0; i < height.size(); i++) { sum += height[i]; } return ret - sum; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号