加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Java实现积水量算法

(2018-04-13 15:05:51)
分类: 软件开发
描述:
凹凸不平的地面每当下雨的时候总会积水。假设地面是一维的,每一块宽度都为1,高度是非负整数,那么可以用一个数组来表达一块地面。例如[0,1,0,2,1,0,1,3,2,1,2,1]可以用来表示下图地面:

Java代码实现如下:
public class MyTest2 {

    private static int[] array = new int[] { 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 };

   
    private static int mount = 0;

    public static void main(String[] args) {

        // 总层数
        int top = 0;

        // 当前层
        int level = 0;

        // 是否存在左墙
        boolean haveLeft = false;

        // 单层累加
        int subMount = 0;

        // 一层一层计算
        while (true) {
            for (int val : array) {
                if (level == 0) {
                    // 第一次循环需要计算总层数
                    if (val > top) {
                        top = val;
                    }
                }

                if (haveLeft) {
                    if (val <= level) {
                        subMount++;
                    } else {
                        // 发现右墙,那么结算
                        mount = mount + subMount;
                        subMount = 0;
                    }
                } else {
                    haveLeft = val > level;
                }
            }

            // 达到最顶层那么跳出循环
            level++;
            if (level == top) {
                break;
            }

            // 计算下一层,那么单层累加需要清空,左墙也需要清空
            subMount = 0;
            haveLeft = false;
        }

        System.out.println(mount);
    }
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有