LeetCode 42. Trapping Rain Water
来源:互联网 发布:怎么使网络稳定 编辑:程序博客网 时间:2024/04/28 11:29
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
.
To solve the problem. the key point to find the maxHeight index.
#include <vector>#include <iostream>#include <climits>using namespace std;/* 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.*/int trap(vector<int>& height) { int maxHeight = 0; int maxIndex = 0; for(int i = 0; i < height.size(); ++i) { if(maxHeight < height[i]) { maxHeight = height[i]; maxIndex = i; } } int water = 0; int maxSoFar = 0; for(int i = 0; i < <strong>maxIndex</strong>; ++i) { if(height[i] < maxSoFar) water += (maxSoFar - height[i]); // less then maxSoFar can accumulate water. else maxSoFar = height[i]; } maxSoFar = 0; for(int i = height.size() - 1; i > <strong>maxIndex</strong>; --i) { if(height[i] < maxSoFar) water += (maxSoFar - height[i]); // less then maxSoFar can accumulate water. else maxSoFar = height[i]; } return water;}int main(void) { vector<int> nums{0, 1, 0, 3, 1, 0, 1, 3, 2, 1, 2, 1}; cout << trap(nums) << endl;}
Another interesting variation! Trapping rain water in matrix
/* Suppose given a matrix {{0, 2, 5}, {5, 4, 5}, {5, 5, 5}}; In this matrix, the max water can be trapped is: 0;*/#include "header.h"using namespace std;class Solution {private: vector< vector<int> > matrix;public: Solution(vector< vector<int> >& input) { matrix = input; } int trappWaterinMatrix() { if(matrix.size() == 0 || matrix[0].size() == 0) return 0; int rows = matrix.size(); int cols = matrix[0].size(); struct posIndex { int value; int row; int col; posIndex(int v, int r, int c) : value(v), row(r), col(c) {} bool operator < (posIndex b) const { return value > b.value; } }; priority_queue<posIndex, vector<posIndex> > minHeap; vector< vector<bool> > visited(rows, vector<bool>(cols, false)); // we need to first get the minimum value from the border. // first row and last row for(int i = 0; i < cols; ++i) { minHeap.push(posIndex(matrix[0][i], 0, i)); visited[0][i] = true; minHeap.push(posIndex(matrix[rows - 1][i], rows - 1, i)); visited[rows - 1][i] = true; } // first column and last column for(int i = 1; i < rows; ++i) { minHeap.push(posIndex(matrix[i][0], i, 0)); visited[i][0] = true; minHeap.push(posIndex(matrix[i][cols -1], i, cols -1)); visited[i][cols - 1] = true; } int waterTrapped = 0; // bfs traversal the matrix to caculate the trapped water. vector< vector<int> > dir{{0, 1}, {0, -1}, {-1, 0}, {1, 0}}; while(!minHeap.empty()) { auto curr = minHeap.top(); minHeap.pop(); for(int i = 0; i < dir.size(); ++i) { posIndex next(0, 0, 0); next.row = curr.row + dir[i][0]; next.col = curr.col + dir[i][1]; if(next.row >= 0 && next.row < rows && next.col >= 0 && next.col < cols && !visited[next.row][next.col]) { visited[next.row][next.col] = true; next.value = max(curr.value, matrix[next.row][next.col]); minHeap.push(next); waterTrapped += max(0, curr.value - matrix[next.row][next.col]); } } } return waterTrapped; }};
0 0
- [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
- 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
- LeetCode-42.Trapping Rain Water
- LeetCode 42. Trapping Rain Water
- hiho#1037 : 数字三角形 (动态规划)
- AsyncTask
- 强大的异或运算
- UVa 1599 Ideal Path[待AC]
- 做到这四点,你才是一个真正成熟的创业者
- LeetCode 42. Trapping Rain Water
- 第8章:重新组织数据---Self Encapsulate Field(自封装字段)
- poj 1426 Find The Multiple dfs
- 一起talk C栗子吧(第一百四十三回:C语言实例--文件操作:基于文件指针三)
- AndroidStudio2.0引用开源框架的步骤
- 极大似然估计的朴素理解
- mysql查询缓存
- NSRunLoop(1)官方文档
- 码农小汪-SpringMVC-控制器详解2