0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# 面试必刷TOP101:接雨水问题

1.简述:

描述

给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个柱子高度图,计算按此排列的柱子,下雨之后能接多少雨水。(数组以外的区域高度视为0)

#yyds干货盘点# 面试必刷TOP101:接雨水问题_数组

数据范围:数组长度 ,数组中每个值满足  ,保证返回结果满足 

要求:时间复杂度 

示例1

输入:

[3,1,2,5,2,4]

返回值:

5

说明:

数组 [3,1,2,5,2,4] 表示柱子高度图,在这种情况下,可以接 5个单位的雨水,蓝色的为雨水 ,如题面图。

示例2

输入:

[4,5,1,3,2]

返回值:

2

2.代码实现:

import java.util.*;
public class Solution {
public long maxWater (int[] arr) {
//排除空数组
if(arr.length == 0)
return 0;
long res = 0;
//左右双指针
int left = 0;
int right = arr.length - 1;
//中间区域的边界高度
int maxL = 0;
int maxR = 0;
//直到左右指针相遇
while(left < right){
//每次维护往中间的最大边界
maxL = Math.max(maxL, arr[left]);
maxR = Math.max(maxR, arr[right]);
//较短的边界确定该格子的水量
if(maxR > maxL)
res += maxL - arr[left++];
else
res += maxR - arr[right--];
}
return res;
}
}

举报

相关推荐

0 条评论