LeetCode —— Trapping Rain Water
2013-09-03 14:02
351 查看
链接:http://leetcode.com/onlinejudge#question_42
原题:
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
return
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!
思路:
我是先将数组排序,从大到小。用左右两个left,right下标,从最大值开始,先两边扩散,
如果落在[left,right]之间的,就pass。
这样的复杂度是O(nlogn)的,主要是排序上面。
不过discussion里面有一个强大的O(n)方法。
代码:
原题:
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!
思路:
我是先将数组排序,从大到小。用左右两个left,right下标,从最大值开始,先两边扩散,
如果落在[left,right]之间的,就pass。
这样的复杂度是O(nlogn)的,主要是排序上面。
不过discussion里面有一个强大的O(n)方法。
代码:
bool cmp(const pair<int, int> &a, const pair<int, int> &b) { return a.first > b.first; } class Solution { public: int trap(int A[], int n) { // Start typing your C/C++ solution below // DO NOT write int main() function if (n <= 2) return 0; vector<pair<int, int> > vec; for (int i=0; i<n; i++) vec.push_back(pair<int, int>(A[i], i)); sort(vec.begin(), vec.end(), cmp); int total = 0; int left, right; left = right = vec[0].second; int count = 1; while (count < n) { int cur = vec[count].second; if (cur > left && cur < right) { count++; continue; } if (cur < left) { for (int i=cur+1; i<left; i++) { total += (vec[count].first - A[i]); } left = cur; } if (cur > right) { for (int i=right+1; i<cur; i++) { total += (vec[count].first - A[i]); } right = cur; } count++; } return total; } };
相关文章推荐
- LeetCode(42)--Trapping Rain Water
- [LeetCode] Trapping Rain Water
- leetCode_Trapping Rain Water
- Leetcode | Trapping Rain Water
- LeetCode Trapping Rain Water
- [week 4][leetcode][array] Trapping Rain Water
- [Leetcode] Trapping Rain Water
- leetcode 042 —— Trapping Rain Water
- [LeetCode] 接雨水,题 Trapping Rain Water
- [leetcode] Trapping Rain Water
- 【leetcode】Trapping Rain Water
- LeetCode Trapping Rain Water
- leetcode - Trapping Rain Water
- [leetCode]Trapping Rain Water
- leetcode Trapping Rain Water
- [leetcode]Trapping Rain Water
- 【leetcode】Trapping Rain Water
- LeetCode 42 - Trapping Rain Water
- LeetCode-Trapping Rain Water
- *LeetCode-Trapping Rain Water