您的位置:首页 > 移动开发

[LeetCode] 42. Trapping Rain Water

2016-07-21 08:57 309 查看
思路:

借鉴此处思路https://discuss.leetcode.com/topic/5125/sharing-my-simple-c-code-o-n-time-o-1-space/34.

用左右两个指针向中间靠拢进行跟踪, 拿左边先举例, 如果当前left的bar高度小于等于right指向的bar, 那么left和right之间至少能保证在left的高度上盛上水, 所以咱们就将就着left进行跟踪, 如果找到了高度更高的bar就更新maxleft, 如果遇到比maxleft低的left, 就把他们的差值存放到结果当中去. 如果当前left的bar高度大于right的bar, 那就动right指针, 其余思路一样. 关键点就在于我们要保证maxleft/right - left/right这些水也能被right/left的bar给挡住才行.

int trap(vector<int>& heights) {
int res = 0;
int left = 0, right = heights.size() - 1;
int maxleft = 0, maxright = 0;
while (left <= right) {
if (heights[left] <= heights[right]) {
if (maxleft <= heights[left])
maxleft = heights[left];
else res += maxleft - heights[left];
left++;
}
else {
if (maxright <= heights[right])
maxright = heights[right];
else res += maxright - heights[right];
right--;
}
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 指针