LeetCode | 42. Trapping Rain Water
来源:互联网 发布:淘宝客佣金设置怎么算 编辑:程序博客网 时间:2024/06/06 01:45
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.
思路:模拟算法,对于每个it,向右查找,分两种情况:
1、右边找到一个不比他矮的,那就把它作为右边界,因为再向右产生的水坑就和it没关系了
2、找不到不必it矮的,就找一个其中最高的且第一次出现的,作为右边界。
然后计算右边界和it之间产生的水坑的面积
//13 msclass Solution {public: int trap(vector<int>& height) { int len = height.size(); int res = 0; int it = 0, max_index = 0, mmax = 0; while(it < len) { max_index = it; mmax = 0; for(int i=it+1;i<len;i++) { if(height[i] >= height[it])//比他高了,后面的水坑不由it决定了 { max_index = i; break; } if(height[i] > mmax)//找到后面第一个最高的那个,比如50202,就是第三个 { mmax = height[i]; max_index = i; } } int delta = min(height[it],height[max_index]); for(int j=it;j<max_index;j++) { if(height[j] < delta) res += (delta-height[j]); } if(max_index == it) it++; else it = max_index; } return res; }};
另一个思路,solution中提供的O(n)算法,实际运行时效果反而不是很理想,16 ms
class Solution {public: int trap(vector<int>& height) { int n = height.size(); int left=0; int right=n-1; int res=0; int maxleft=0, maxright=0; while(left<=right) { if(height[left]<=height[right]) { if(height[left]>=maxleft) maxleft=height[left]; else res+=maxleft-height[left]; left++; } else { if(height[right]>=maxright) maxright= height[right]; else res+=maxright-height[right]; right--; } } return res; }};
阅读全文
1 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
- shtml与html
- struts2文件上传
- 最全的常用正则表达式大全——包括校验数字、字符、一些特殊的需求等等
- 修改xampp默认sql密码
- [转]Hadoop之MapReduce
- LeetCode | 42. Trapping Rain Water
- [每周心学]示弟立志说(附译文)
- 【百词斩】2016.10.30
- WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册
- 【百词斩】2016.11.01
- 【百词斩】2016.11.02
- 重拾SQL——表中索值
- 重拾SQL——从无到有
- 【百词斩】2016.11.06