leetcode42. Trapping Rain Water
来源:互联网 发布:淘宝aj比较靠谱的店 编辑:程序博客网 时间:2024/06/16 16:59
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
.
思路:可以找到每个元素左边和右边最大的,当前bar可以装的大小即为min(max_left,max_right) - height[i]
前提是min(max_left,max_right) < height[i]
有两种方法,第一种比较粗暴,对每个元素分别找出左边最大,右边最大的时间复杂度O(n),空间复杂度O(n)
第二种,先找出所有元素中最大的,然后在两边分别分别处理,时间复杂度O(n),空间复杂度O(1)
AC1:
class Solution {public: int trap(vector<int>& height) { int result = 0; int size = height.size(); if (size == 0) return result; if (size == 3) return (min(height[0],height[2]) - height[1]) > 0 ? (min(height[0],height[2]) - height[1]) : 0; vector<int> max_left; vector<int> max_right; int max = height[0]; max_left.push_back(max); //计算每个元素左边最大的 for (int i = 1; i < size - 2; i++) { max = max > height[i] ? max : height[i]; max_left.push_back(max); } //计算每个元素右边最大的 max_right.push_back(height[size - 1]); max = height[size - 1]; for (int i = size - 2; i > 1; i--) { max = max > height[i] ? max : height[i]; max_right.push_back(max); } //计算result for (int i = 0; i < size - 2; i++) { int temp = min(max_left[i],max_right[size - 3 - i]) - height[i + 1]; if (temp > 0) result += temp; } return result; }};
class Solution {public: int trap(vector<int>& height) { int result = 0; int size = height.size(); if (size < 3) return result; if (size == 3) return (min(height[0],height[2]) - height[1]) > 0 ? (min(height[0],height[2]) - height[1]) : 0; //找出最高的 int max_index = 0; for (int i = 1; i < size; i++) if (height[i] > height[max_index]) max_index = i; //搜索左边 for (int i = 1,peak = 0; i < max_index; i++) { if (height[i] > height[peak]) peak = i; else result += height[peak] - height[i]; } //搜索右边 for (int i = size - 2,peak = size - 1; i > max_index; i--) { if (height[i] > height[peak]) peak = i; else result += height[peak] - height[i]; } return result; }};
0 0
- [LeetCode42]Trapping Rain Water
- LeetCode42:Trapping Rain Water
- Leetcode42 Trapping Rain Water
- LeetCode42. Trapping Rain Water
- leetcode42 Trapping Rain Water
- leetcode42~Trapping Rain Water
- leetcode42. Trapping Rain Water
- LeetCode42. Trapping Rain Water
- Leetcode42. Trapping Rain Water
- LeetCode42. Trapping Rain Water
- LeetCode42——Trapping Rain Water
- LeetCode42/11 Trapping Rain Water/Container With Most Water/Hist area**
- LeetCode: Trapping Rain Water
- LeetCode : Trapping Rain Water
- Trapping Rain Water
- [LeetCode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- 【C】求两个数的最大公约数
- 解决服务器和本地中文乱码的问题
- SpringMVC
- 动态规划——数塔问题
- Pascal's Triangle
- leetcode42. Trapping Rain Water
- 20位活跃在Github上的国内技术大牛
- 链表插入排序
- 【codevs】3269 混合背包
- JavaScript
- 七月机器学习之决策树随机森林和adaboost11
- 论文笔记 SSD: Single Shot MultiBox Detector
- 堆的建立&堆排序
- 【一颗不甘的心】今天,说说自己