要求
有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度,当开始下雨了(雨水足够多)台阶之间的水坑会积水多少呢?
如下图,可以表示为数组[0,1,0,2,1,0,1,3,2,1,2,1],返回积水量6。
实施
import java.util.ArrayList;
public class Test3 {
public static void main(String[] args) {
int[] a = {0, 2, 0, 3, 9, 0, 5, 1, 2, 0, 2, 0,10,2,6,8};
int temp = 0;
//Test5.fun1(a);
//求最大数
for (int i = 0; i < a.length - 1; i++) {
if (a[i] > a[i + 1]) {
if (temp < a[i]) {
temp = a[i];
}
}
}
int sum = 0;
int[] b = getArr(a);
for (int i = 0; i < temp; i++) {
//判断是否是第一次
boolean flag = true;
if (i==0){
flag = false;
}
for (int j = 0; j < b.length; j++) {
//判断是否是第一次,第一次则不减1
if (flag) {
if (b[j]==0 || b[j] < 0){
b[j] = 0;
}else {
b[j] = b[j] - 1;
}
}
}
b = getArr(b);
for (int j = 0; j <b.length ; j++) {
if (b[j] == 0 ) {
sum++;
}
}
}
System.out.println(sum);
}
public static int[] getArr(int[] a) {
int start = 0;
int end = 0;
//取第一个大于0的数的下标
for (int i = 0; i < a.length; i++) {
if (a[i] > 0){
start = i;
break;
}
}
//取最后一个大于0的数的下标
for (int i = a.length-1; i > 0; i--) {
if (a[i] > 0 ){
end = i;
break;
}
}
ArrayList arr = new ArrayList();
for (int i = start; i < end +1; i++) {
arr.add(a[i]);
}
int[] b = new int[arr.size()];
for (int i = 0; i <arr.size() ; i++) {
b[i]= (int)arr.get(i);
}
return b;
}
}
版权属于:牧瀬くりす
本文链接:https://hcyacg.com/tutorial/Java-9.html
本站文章采用知识共享署名4.0 国际许可协议进行许可,允许非商业转载,但必须注明出处!