Trapping Rain Water

来源:互联网 发布:java简历项目经验案例 编辑:程序博客网 时间:2024/06/05 16:53
Trapping Rain Water  
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.

看了网上的说明说是用two pointer解法,这个可能确实一个比较完美的解法。

后来又发现了一个更加接地气的解法,
找到最长的那块木板,假设其下标为maxIdx。
分别从左侧和右侧向其逼近。

这个解法既容易理解也还是O(n)时间度的。这个解法符合思路简洁美

int trap(int A[], int n) {int low = 0, high = n-1;int barrier = 0;int volume = 0;while (low < high){if (A[low] > A[high]){if (barrier > A[high]) volume += barrier - A[high];else barrier = A[high];high--;}else {if (barrier > A[low])volume += barrier - A[low];elsebarrier = A[low];low++;}}  return volume;}



0 0
原创粉丝点击