• 接雨水问题


      public static long maxWater(int[] arr) {
            if (arr == null || arr.length <= 2) {
                return 0;
            }
            int left = 0;
            int right = arr.length - 1;
            long sum = 0;
            // 找出左右边界的最小值作为水位高度
            int minHeight = Math.min(arr[left], arr[right]);
            while (left < right) {
                // 如果左边较低,则左边界向右遍历, 否则右边界向左移动
                if (arr[left] < arr[right]) {
                    left++;
                    // 如果当前标尺小于水位,则水量累加
                    if (minHeight > arr[left]) {
                        sum += minHeight - arr[left];
                    } else {
                        // 否则,将此标尺和右边边界高度进行比较,找出剩下数组中的新水位
                        minHeight = Math.min(arr[left], arr[right]);
                    }
                } else {
                    right--;
                    // 同理,如果当前标尺小于水位,则水量累加
                    if (minHeight > arr[right]) {
                        sum += minHeight - arr[right];
                    } else {
                        // 否则,将此标尺和左边界的高度进行比较,找出剩余数组中的新水位
                        minHeight = Math.min(arr[left], arr[right]);
                    }
                }
            }
            return sum;
        }

  • 相关阅读:
    《Java 多线程实战系列》- 01 基本概念与底层原理
    【MySQL】数据类型
    C++ [STL之vector模拟实现]
    Visual Studio 2019编译HTKlib
    线程的属性
    python/pygame 挑战魂斗罗 笔记(三)
    Zemax基础知识7--衍射知识(一)
    springboot集成apollo
    在“百模大战”重生,搜索引擎又行了?
    用帝国主义竞争算法(ICA)求解旅行商问题(TSP)(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/chenyong6301567/article/details/126870909