zoukankan      html  css  js  c++  java
  • 最大容积 Container With Most Water

    2018-07-31 17:28:42

    问题描述:

    问题求解:

    很容易想到的是Brute Force,也就是枚举所有可能的pairs,这种解法的时间复杂度为O(n ^ 2),由于本题的数据规模较大,会TLE。那么就要对算法进行改进了。

    这里用到的解法是Two Pointers,左右各设置一个指针,l 和 r。

    首先计算最初的面积 curArea = Math.min(height[l], height[r]) * (r - l)。

    如果height[l] < height[r],那么可以想见的是将右边线无论如何向左调整,都是无法继续增大面积的,因此此时只能调整左边线,l++。

    同理height[l] > height[r],那么只能调整右边线来谋求更好的解,r--。

    如果出现了height[l] = height[r],则可任意调整左边或者右边来谋求更好的解。

        public int maxArea(int[] height) {
            int res = 0;
            int l = 0;
            int r = height.length - 1;
            while (l < r) {
                int curArea = Math.min(height[l], height[r]) * (r - l);
                if (curArea > res) res = curArea;
                if (height[l] < height[r]) l++;
                else r--;
            }
            return res;
        }
    
  • 相关阅读:
    手动编译安装nginx
    centoos 安装hadoop集群
    block中如何避免循环引用
    正则表达式
    iOS开发ARC内存管理
    block的内部实现
    Block存储区域
    block的语法
    Collection(数组、字典、集合)
    block捕获自动变量和对象
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/9397238.html
Copyright © 2011-2022 走看看