leetcode 第41题 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
.
The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped. Thanks Marcos for contributing this image!
题目意思应该很好理解,就是给定数组后,如图,能存放多少单位的水。网上大多数人的方法都是累加每柱能容纳的水。例如他。我的做法是,累加当前到之后第一个不小于自己的柱子能存的水。定义一个start,每次计算完一块水域之后,start跳到这块水域的右边柱子往后找新的水域。直到最后。应该是O(n)的。现在就出现问题了,如果出现4 2 3 的例子,如果按照刚才的思路,4的时候,后面没有大于等于4的数,那start就++的话,答案最终是零了。解决的办法是,如果之后没有发现比大于等于自己的柱子,那么就将自己减一,再判断,知道自己为零,或者是找到不小于自己的柱子为止。
oj上证明我的方法比别人快5倍。
class Solution {
public:
int trap(int A[], int n)
{
int sum = 0, start = -1;
while(++start < n && A[start] == 0);// 找到第一个非零为start
while(start < n)
{
int next = start, minus = 0;
while(++next < n && A[next] < A[start])
{
minus += A[next];
}
if (next == n) // 说明之后没有比当前大或者相等的数,所以要将A[start]值减一后再判断,直到有找到不小于当前的数或者已经减到0了
{
A[start] -= 1;
if (A[start] > 0)//只要大于零就要再判断之后有没有不小于当前的数
continue;
}
sum += (next - start - 1) * A[start] - minus;
start = next;
}
return sum;
}
};
发现oj上如果把注释去掉,居然更快。。。
2015/04/03: 只扫描一遍,left从左往右,right从右往左,每次比较小的往里走,走到比自己大的位置,过程当中记录可以盛的水。(阿里2015校招实习生笔试题)
class Solution {
public:
int trap(int A[], int n) {
int left = , right = n - , water = ;
while(left < right){
if (A[left] < A[right]){
int i = left + ;
while(i < right && A[i] < A[left]){
water += A[left] - A[i++];
}
left = i;
}
else{
int i = right - ;
while(i > left && A[i] < A[right]){
water += A[right] - A[i--];
}
right = i;
}
}
return water;
}
};
扫描两遍:第一遍从左往右,记录当前左边的最大, 第一遍从右往左,记录到当前的最大,根据左边和右边以及自己的数,就可以判断当前是否可以盛水。
class Solution {
public:
int trap(int A[], int n) {
if (n <= ) return ;
int water = , perm[n], tmpMax = ;
for (int i = ; i < n; ++i){
if (tmpMax < A[i-]){
tmpMax = A[i-];
}
perm[i] = tmpMax;
}
tmpMax = ;
for (int i = n - ; i > ; --i){
if (tmpMax < A[i+]){
tmpMax = A[i+];
}
water += min(perm[i], tmpMax) - A[i] > ? min(perm[i], tmpMax) - A[i] : ;
}
return water;
}
};
leetcode 第41题 Trapping Rain Water的更多相关文章
- [LeetCode] 接雨水,题 Trapping Rain Water
这题放上来是因为自己第一回见到这种题,觉得它好玩儿 =) Trapping Rain Water Given n non-negative integers representing an eleva ...
- LeetCode(42)Trapping Rain Water
题目 Given n non-negative integers representing an elevation map where the width of each bar is 1, com ...
- LeetCode 笔记系列12 Trapping Rain Water [复杂的代码是错误的代码]
题目:Given n non-negative integers representing an elevation map where the width of each bar is 1, com ...
- LeetCode: Trapping Rain Water 解题报告
https://oj.leetcode.com/problems/trapping-rain-water/ Trapping Rain WaterGiven n non-negative intege ...
- [LeetCode] Trapping Rain Water 收集雨水
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- [LeetCode] 42. Trapping Rain Water 收集雨水
Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...
- [LeetCode] Trapping Rain Water II 收集雨水之二
Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevati ...
- LeetCode:Container With Most Water,Trapping Rain Water
Container With Most Water 题目链接 Given n non-negative integers a1, a2, ..., an, where each represents ...
- [Leetcode][Python]42: Trapping Rain Water
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 42: Trapping Rain Waterhttps://oj.leetc ...
随机推荐
- Maven聚合和继承的详细解释
说到聚合与继承我们都非常熟悉,maven相同也具备这种设计原则.以下我们来看一下Maven的pom怎样进行聚合与继承的配置实现. 一.为什么要聚合? 随着技术的飞速发展和各类用户对软件的要求越来越高. ...
- socket示例代码演示程序(螺纹)
client码,如以下: import java.io.*; import java.net.*; public class DailyAdviceClient { public void go(){ ...
- .NET开发者必备的11款免费工具
原文:.NET开发者必备的11款免费工具 如今,HTML5,jQuery,JavaScript等等这些热门技术,受到了开发者们的强烈追捧,有了这些开发工具也为开发者们减轻了许多负担.本文为开发者介绍了 ...
- js中document.write()使用方法
<script> var hrf = window.location.href; if(hrf.indexOf('change')>0){ ...
- ASP.NET——两个下拉框来实现动态联动
介绍: 在网页中.我们常常会遇到下图中的情况.首先在下拉框中选择所在的省.选择之后,第二个下拉框会自己主动载入出该省中的市.这样设计极大的方便了用户的查找.那这是怎样实现的呢? 1.建立数据库 &qu ...
- strncpy和strcpy
实体化代码运行图: 实现代码: #include <stdio.h> #include <string.h> #include <math.h> #include ...
- Unity该插件NGUI学习(1)—— 环境结构
Unity官方网站http://unity3d.com/unity/download下载最新版本4.5.4 发现在神圣的论坛裂纹(Windows)版本号http://game.ceeger.com/f ...
- crawler_httpurlconnection_自动编码识别
核心思想: 1:从响应头中读取 [命中解流准确率最高] 2:如果响应头中没有,打开流从源码中读取,[取舍,如果有一般在前30行会有,前100行中寻找] 3:如果还没有,根据字节码code位置,字符识别 ...
- elasticsearch的rest搜索---对于相关度的大牛的文档
目录: 一.针对这次装B 的解释 二.下载,安装插件elasticsearch-1.7.0 三.索引的mapping 四. 查询 五.对于相关度的大牛的文档 五.对于相关度的大牛的文档 http: ...
- C#操作Excel初探
近期一段时间正好在做winform导出Excel报表的问题,学习了一下C#操作Excel的一些方法(如:向Excel中插入图片:删除Excel指定sheet中的某行或某列,在Excel指定的单 ...