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.
[分析] 此题两种解法均参考
http://blog.csdn.net/linhuanmars/article/details/20888505,详细分析可查看原文。摘出关键点拨:思路 1 从两边各扫描一次得到我们需要维护的变量,通常适用于当前元素需要两边元素来决定的问题,非常类似的题目是Candy, 思路2 是向中间夹逼时能确定接下来移动一侧窗口不可能使结果变得更好,所以每次能确定移动一侧指针,直到相遇为止。这种方法带有一些贪心,用到的有Two Sum,Container With Most Water。
public class Solution {
// method 1: time O(N), space O(N), need 2 scans
public int trap(int[] height) {
if (height == null || height.length <= 2)
return 0;
int N = height.length;
int[] bar = new int[N];
int max = 0;
for (int i = 0; i < N; i++) {
bar[i] = max;
max = Math.max(max, height[i]);
}
max = 0;
int res = 0;
for (int i = N - 1; i >= 0; i--) {
bar[i] = Math.min(max, bar[i]);
max = Math.max(max, height[i]);
res += bar[i] - height[i] > 0 ? bar[i] - height[i] : 0;
}
return res;
}
// method 2: time O(N), only one scan
public int trap2(int[] height) {
if (height == null || height.length <= 2)
return 0;
int l = 0, r = height.length - 1;
int min;
int res = 0;
while (l < r) {
min = Math.min(height[l], height[r]);
if (height[l] == min) {
l++;
while (l < r && height[l] < min) {
res += min - height[l];
l++;
}
} else {
r--;
while (l < r && height[r] < min) {
res += min - height[r];
r--;
}
}
}
return res;
}
}
分享到:
相关推荐
c语言入门 C语言_leetcode题解之42-trapping-rain-water.c
js js_leetcode题解之42-trapping-rain-water.js
- **2.1.15 Trapping Rain Water** - 计算雨水能够困住的水量。 - 实现思路:使用动态规划方法,记录每条柱子左侧最高值和右侧最高值,然后计算水量。 - **2.1.16 Rotate Image** - 将一个正方形矩阵顺时针旋转...
- Trapping Rain Water: 给定一个数组,其中每个元素代表一个宽度为1的柱子高度,计算能接多少雨水。 - Multiply Strings: 给定两个非负整数字符串形式的数,要求进行乘法运算。 - Wildcard Matching: 实现支持'?'和...
力码解决方案 Leetcode是一个网站,人们——...├── Trapping Rain Water │ ├── Readme.md │ └── solution.js ├── Wildcard Matching │ ├── Readme.md │ └── solution.js ├── Valid Number │
leetcode 不会3D 捕集雨水系统 该 repo 包含复杂 3D 雨水收集系统的解决方案,该系统在 Leetcode Problem No. 407 和 Google Interview Round 中提出。 此外,它将“0”视为系统的排水。 (查看自述文件以获得详细...
多线程 leetcode 前言 每天刷点leetcode,基于java语言实现。 leetcode上难度分三档:easy,medium,hard. 如下: easy medium Remove Nth Node From End of List Swap Nodes ...Trapping Rain Water
Trapping Rain Water LeetCode 61 RotateList LeetCode 75 Sort Colors LeetCode 125 Valid Palindrome LeetCode 167 Two Sum II - Input array is sorted LeetCode 344 Reverse String LeetCode 345 Reverse Vowels...
Trapping Rain Water II], BFS/Priority queue 2017.06.19 打卡[LeetCode 145. Binary Tree Postorder Traversal], Tree/stack 2017.06.20 打卡[LeetCode 107. Binary Tree Level Order Traversal II], Tree/BFS ...
leetcode 1004 leetcode NEXT:42 Trapping Rain Water 刷题顺序 刷题内容总的来说包括数据结构、算法和技巧 按照tag分类别进行刷题,跳过like<200>like的题目 按Acceptance由高到低进行,每个tag所刷题目大于20...
接雨水](./Array/trapping-rain-water.md) [0048 旋转图像](./Array/rotate-image.md) Heap 堆 [0023 合并K个排序链表](./Heap/merge-k-sorted-lists.md) String 字符串 [0006 Z字形变换](./String/zigzag-...
# [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...
leetcode 答案 Algorithms 一、three sum 三数相加问题 问题描述 在一个由 number 组成的数组中,找到所有的 3 个数组成的数组,使得这三个数字的和等于给定的数字 解答 考虑到时间复杂度肯定大于等于 O(n²) 可以先...
Trapping Rain Water 85. Maximal Rectangle Monotonic stack for 2d array 239. Sliding Window Maximum 255. Verify Preorder Sequence in Binary Search Tree 907. Sum of Subarray Minimums 二叉搜索树 99. ...
trapping-rain-water 滑动窗口 通过窗口的大小不断调整来找到合适的值,或者窗口大小不变,通过左右移动来找到相应的结果 \ \ 其他 非 LeetCode 题,单纯在别人面试中看到的 \ 链表 \ swap-nodes-in-pairs linked-...
leetcode 答案leetcode leetcode.com 问题的答案 跑步 python -m venv .venv source .venv/bin/activate pip install -r requirements.txt pytest <question>/tests.py ...lc42_trapping_rain_water/tests.py
leetcode添加元素使和等于 经验教训 一定要吧功能尽量细化为函数,这样一者做题思路比较清晰,二者可以在某些情况下直接return值。 如果输入的形式是一个序列,则可以想想:分治、动规、贪婪,一般不建议搜索,因为...
我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手... "three_sum.erl","trapping_rain_water.erl", "valid_palindrome.erl" 个人认为dungeon_game这个题目解题逻辑很体现erlang的函数式的思维逻辑
在本压缩包中,我们关注的是一个Python编程相关的学习资源,特别针对LeetCode平台上的第42题“接雨水”(Trapping Rain Water)的面试题解。LeetCode是一个广泛被程序员用来提升算法技能和准备面试的在线平台,其中...