关注我,笔试编程题无忧,Java笔试之每日一题,提升自己:
**题目:**输入一个数组,代表一排宽度为1的柱子,数组元素arr[i]为非负整数代表第i根柱子的高度,如果下雨最多接多少水。
//位置i能接多少水,取决于它左右侧最高柱子中的最小值。
public int trap(int[]arr) {
int n = arr.length;
//使用两个数组分别记录位置i左右两侧最大值
int[] l = new int[n];
int[] r = new int[n];
int res = 0;
l[0] = arr[0];
r[0] = arr[n-1];
for(int i = 1;i<n;i++) {
l[i] = Math.max(arr[i], l[i-1]);
}
for(int i = n-2;i>=0;i--) {
r[i] = Math.max(arr[i], r[i+1]);
}
for(int i = 1;i<n-1;i++) {
res += Math.min(l[i], r[i])-arr[i];
}
return res;
}