Java学习日志[9] 有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度,当开始下雨了(雨水足够多)台阶之间的水坑会积水多少呢?

要求

有一组不同高度的台阶,有一个整数数组表示,数组中每个数是台阶的高度,当开始下雨了(雨水足够多)台阶之间的水坑会积水多少呢?
如下图,可以表示为数组[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;
    }
}
我的文章对您有帮助吗?
我很可爱 请给我钱
扫一扫拿红包 → 扫商家收款码 → 花呗支付比红包多1分钱的金额
既可免费赞赏,又可完成支付宝支付任务!
最后修改:2019 年 10 月 05 日 10 : 57 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论