题目描述

给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i,ai) 。画 n 条垂直线,使得垂直线 i 的两个端点分别为 (iai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

注意:你不能倾斜容器,n 至少是2。


图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例:

输入: [1,8,6,2,5,4,8,3,7]
输出: 49

题目解析

定义 i 和 j 两个指针分别指向数组的左右两端,然后两个指针向中间搜索,并且更新面积最大值 res,直到 i == j 时返回 res

其中 容器装水量的算法是找出左右两个边缘中较小的那个乘以两边缘的距离

动画描述


代码实现

class Solution {
    public int maxArea(int[] height) {
        int i = 0, j = height.length - 1, res = 0;
        while(i < j){
            res = height[i] < height[j] ? Math.max(res, (j - i) * height[i++]): Math.max(res, (j - i) * height[j--]); 
        }
        return res;
    }
}

复杂度分析

  • 时间复杂度 O(N),双指针遍历一次底边宽度 N 。

  • 空间复杂度 O(1),指针使用常数额外空间。


©著作权归作者所有:来自51CTO博客作者mb5fe18fab305a5的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 巩固 | 最全面的算法复杂度分析
  2. 这道算法题太简单?你忽略了时间复杂度的要求!
  3. 冰与火之歌:「时间」与「空间」复杂度
  4. 看动画轻松理解时间复杂度(二)
  5. 看动画轻松理解时间复杂度(一)
  6. 同样的复杂度,为什么插入排序比冒泡排序更受欢迎?
  7. 数据结构--时间复杂度与空间复杂度

随机推荐

  1. 3天破9亿!上万条评论解读《西虹市首富》是
  2. 2021年春招,Java后端最全面试攻略,吃透25个
  3. Pandas小册子:根据条件创建新的列
  4. 在pfSense中强制使用Pi-hole过滤广告
  5. Python英语-Issue06
  6. 彻底解决基于Debian发行系统的vim鼠标模
  7. 毫秒时间戳标识消息导致数据丢失的问题排
  8. Python英语-Issue07
  9. 29种Bokeh基础可视化图形,学会了可以大展
  10. Bokeh中数据的添加、修改和筛选 | Bokeh