博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程题—leetcode42:接雨水
阅读量:2440 次
发布时间:2019-05-10

本文共 1227 字,大约阅读时间需要 4 分钟。

题目描述
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

在这里插入图片描述

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/trapping-rain-water著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目分析
1、我们可以按列进行分析,用一个循环来循环每一列2、循环到第i列的时候,左边有一个最大值max_left和右边右边有一个最大值max_right,我们可以发现,只有当height[i]都小于上面的这两个值的时候才会有雨水积累3、写出代码,可以发现max_left我们可以在遍历height的时候就可以随手记录,但max_right却需要不断的循环
//代码1class Solution {
public int trap(int[] height) {
int res=0; int max_left=0; int max_right=0; for(int i=0;i
i;j--) {
if (height[j]>=max_right) {
max_right=height[j]; } } if ((max_left>height[i])&&(max_right>height[i])){
res+=Math.min(max_left, max_right)-height[i]; } if(height[i]>max_left) max_left=height[i]; } return res; }}
由于上面的max_right需要我们每次循环进行判断,所以我们在想能不能max_right和max_left一样,仅仅遍历一遍就可以确定它的值1、在右边高的时候从左往右遍历2、在左边高的时候从右往左遍历
//代码2:双指针法class Solution {
public int trap(int[] height) {
int res=0; int left=1; int right=height.length-2; int max_left=0; int max_right=0; while(left<=right) {
if (height[left-1]
你可能感兴趣的文章
debian下编译2.6.13.2内核的步骤及感受(转)
查看>>
预装正版的市场意义(转)
查看>>
创建小于16M XFree86迷你Linux系统(转)
查看>>
shell中常用的工具(转)
查看>>
使用MySQL内建复制功能来最佳化可用性(转)
查看>>
一个比较vista的vista主题for rf5.0fb(转)
查看>>
推荐一款 Linux 上比较漂亮的字体(转)
查看>>
在Linux中添加新的系统调用(转)
查看>>
Fedora Core 5.0 安装教程{下载}(转)
查看>>
把ACCESS的数据导入到Mysql中(转)
查看>>
shell里边子函数与主函数的实例(转)
查看>>
Linux中MAXIMA符号运算软件的简介(转)
查看>>
银行选择Linux 则无法回避高成本(转)
查看>>
上网聊天需要防范的几大威胁(转)
查看>>
[分享]后门清除完全篇(转)
查看>>
用php在linux下连接mssql2000(转)
查看>>
让你的Linux支持WEB修改密码(转)
查看>>
MYSQL的master/slave数据同步配置(转)
查看>>
一个完整的ftp远程批量shell(转)
查看>>
Vsftpd匿名无法上传,配置如下,帮忙找下原因,谢谢~!(转)
查看>>