LeetCode题目:42. Trapping Rain Water
2017-11-12 14:26
405 查看
LeetCode题目:42. Trapping Rain Water
原题链接:https://leetcode.com/problems/trapping-rain-water/description/解题思路:
核心思想:
并不用直接处理水的数量,而是通过计算其他的值,间接计算水的数量。通过计算总数量,空气的数量,条的高度总和,可得
水的数量 = 总数量 - 空气的数量 - 条的高度总和
代码细节:
总数量可以视为maxHeight * width,为一个大矩形。空气可分为左右部分,通过最高的条来区分。
每个空气部分可以看成多个矩形组成,每当条的高度超过之前的最大值后,都可以把这部分多出的空气矩形计算出来
坑点:
没什么坑点,一帆风顺代码:
int trap(vector<int>& height) { // sum - sumAir - sumBar = sumWater // sum = maxHeight * height.size() int sumBar = 0; int sumAir = 0; int maxHeight = 0; int maxHeightIndex = 0; // 除去左半部分Air for (int i = 0; i < height.size(); i++) { // 更新bar总和 sumBar += height[i]; // 更新Air总和 if (height[i] > maxHeight) { sumAir += i * (height[i] - maxHeight); // 记录最大值的下标 maxHeightIndex = i; maxHeight = height[i]; } } maxHeight = 0; // 计算右半部分Air for (int i = height.size() - 1; i >= maxHeightIndex; i--) { if (height[i] > maxHeight) { sumAir += (height.size() - 1 - i) * (height[i] - maxHeight); maxHeight = height[i]; } } return maxHeight * height.size() - sumAir - sumBar; }
相关文章推荐
- [array] leetcode - 42. Trapping Rain Water - Hard
- LeetCode 42. Trapping Rain Water 题解
- leetcode 42. Trapping Rain Water
- 42. Trapping Rain Water 及类似题目 407. Trapping Rain Water II 11. Container With Most Water
- Leetcode 42. Trapping Rain Water (Hard) (cpp)
- 【LeetCode】42. Trapping Rain Water算法及注释
- 面试算法——双指针的应用leetcode 42. Trapping Rain Water
- LeetCode------42. Trapping Rain Water(捕获雨水量)
- Hard-题目7:42. Trapping Rain Water
- [Leetcode] 42. Trapping Rain Water 解题报告
- 【LeetCode】42. Trapping Rain Water
- LeetCode 42. Trapping Rain Water(java)
- 第一周:[leetcode] 42. Trapping Rain Water
- LeetCode 42. Trapping Rain Water(收集雨水Ⅰ)
- ***LeetCode 42. Trapping Rain Water
- [leetcode] 【数组】42. Trapping Rain Water
- [LeetCode]42. Trapping Rain Water
- Leetcode 42. Trapping Rain Water
- LeetCode 42. Trapping Rain Water(装雨水)
- Leetcode 42. Trapping Rain Water