当青训营遇上码上掘金
题目
现有 n 个宽度为 1 的柱子,给出 n 个非负整数依次表示柱子的高度,排列后如下图所示,此时均匀从上空向下撒青豆,计算按此排列的柱子能接住多少青豆。(不考虑边角堆积)
测试用例:
输入:height = [5,0,2,1,4,0,1,0,3]
输出:17
解析:上面是由数组 [5,0,2,1,4,0,1,0,3] 表示的柱子高度,在这种情况下,可以接 17 个单位的青豆。
思路
这题是力扣的经典题“接雨水”,只是把雨水换成了青豆。
这里用了一点取巧的思路:左右高度的较小者,减去当前块高,就是可装水量
代码
/**
* 支持 import Java 标准库 (JDK 1.8)
*/
import java.util.*;
/**
* 注意:目前 Java 代码的入口类名称必须为 Main(大小写敏感)
*/
public class Main {
public static void main(String []args) {
int [] arr= {5,0,2,1,4,0,1,0,3};
System.out.println(trap(arr));
}
public static int trap(int[] height) {
int n=height.length;
int sum=0;
for(int i=1;i<n;i++){
int maxl=0,maxr=0;
for(int j=i-1;j>=0;j--){
maxl=Math.max(maxl,height[j]);
}
for(int j=i+1;j<n;j++){
maxr=Math.max(maxr,height[j]);
}
int h=Math.min(maxl,maxr);
if(h>height[i]) sum+=h-height[i];
}
return sum;
}
}