【LeetCode】42. Trapping Rain Water(C++)
地址:https://leetcode.com/problems/trapping-rain-water/ 题目:Given nnn 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. The above elevation map is represented by array [0,1,2,3,1]. In this case,6 units of rain water (blue section) are being trapped. Example: Input: [0,1] Output: 6 理解:寻找这个奇怪的容器可以装多少水。在位置i可以装的水取决于其左右两边的高边中较低的。例如对于上图中的5,左边最高为3,右边最高为7,所以可以装的水被3的高度所限制。 实现1:基于动态规划的实现。为了避免每次重复寻找每个位置左右的最大元素,使用了两个数组,采用动态规划的思想保存位置i左边和右边的最大元素。基本思想是,对于i位置,其左边的最大值就等于i-1位置左边的最大值和height[i]两者中的最大值。同理,右侧的最大值要从右侧找到。 class Solution { public: int trap(vector if (height.empty()) return 0; int size = height.size(); vector left_max[0] = height[0]; for (int i = 1; i < size; ++i) left_max[i] = max(height[i],left_max[i - 1]); right_max[size - 1] = height[size - 1]; for (int i = size - 2; i >= 0; --i) right_max[i] = max(height[i],right_max[i + 1]); int res = 0; for (int i = 1; i < size - 1; ++i) res += min(left_max[i],right_max[i]) - height[i]; return res; } }; 实现2:可以观察上面给出的两个left_max和right_max数组。当right_max[i]>left_max[i]的时候,水的体积取决于left_max,而left_max[i]>right_max[i]的时候,取决于right_max。若height[right] class Solution { public: int trap(vector int res = 0; int left = 0,right = height.size() - 1; int left_max = 0,right_max = 0; while (left < right) { if (height[left] < height[right]) { height[left] >= left_max ? (left_max = height[left]) : (res += left_max - height[left]); ++left; } else { height[right] >= right_max ? (right_max = height[right]) : (res += right_max - height[right]); --right; } } return res; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Repeater控件绑定XmlDataSource数据源
- Cocos2d-X 学习笔记 18 CCLayerMultiplex管理多个层
- JSONCPP操作帮助
- 【AJAX】ASP.NET AJAX小结(一)
- comboBox 的 itemMatchingFunction & labelToItemFunct
- appcompat_v7/res/values-v21/themes_base.xml No resource
- 通过给出“不包含在聚合函数中”自我加入和分组(SQL-server
- Cocos2D:塔防游戏制作之旅(七)
- 深度分析NandFlash—控制器参数TACLS、TWRPH0和TWRPH1的确定
- ios – Xcode中是否有CarPlay模拟器