zoukankan      html  css  js  c++  java
  • 接雨水-备忘录算法

    算法参考:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484482&idx=1&sn=9503dae2ec50bc8aa2ba96af11ea3311&source=41#wechat_redirect

    备忘录算法使用Map存储已查询过的结果,用以减少循环次数。

        public static int w() {
            int sumWater = 0;
    
            int[] a = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1};
            //左侧最大值
            int[] leftMaxArray = new int[a.length];
            //右侧最大值
            int[] rightMaxArray = new int[a.length];
    
            leftMaxArray[0] = a[0];
            rightMaxArray[rightMaxArray.length - 1] = 0;
    
            //获得左侧最大值
            for (int j = 1; j < a.length; j++) {
                leftMaxArray[j] = Math.max(leftMaxArray[j - 1], a[j-1]);
            }
    
            //获取右侧最大值
            for (int j = rightMaxArray.length - 2; j >= 1; j--) {
                rightMaxArray[j] = Math.max(rightMaxArray[j + 1], a[j+1]);
            }
    
            for (int i = 0; i < a.length - 1; i++) {
                //同时满足左侧最大值大于当前值,并且右侧最大值大于当前值,才可以接雨水
                if (leftMaxArray[i] > a[i] && rightMaxArray[i] > a[i]) {
                    int temp = Math.min(leftMaxArray[i], rightMaxArray[i]) - a[i];
                    sumWater += temp;
                    System.out.println("i=" + i + ";值=" + a[i] + ";highLeftMax=" + leftMaxArray[i] + ";highRightMax=" + rightMaxArray[i] + ";sumWater=" + temp);
                }
            }
            System.out.println(sumWater);
            return sumWater;
        }
  • 相关阅读:
    MySQL大表优化方案
    写一个简单脚本检测mysql主从是否正常
    Nginx配置基于ip的虚拟主机
    推荐一些好的linux学习网站
    shell基础入门(一)
    centos7和linux防火墙配置入门
    centos7.0之vsftpd随笔
    获取系统相关属性
    linux 文件管理操作入门
    ANSI文件操作
  • 原文地址:https://www.cnblogs.com/use-D/p/13306041.html
Copyright © 2011-2022 走看看