Leetcode11. 盛最多水的容器(双指针)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode11. 盛最多水的容器(双指针)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/container-with-most-water/

解题思路

这是一道非常经典的双指针题目。由于面积为Math.min(height[i], height[j]) * (j - i);我们可以发现如果每次必须使i或j往中间移动一步,那么我们肯定会让矮的一边往中间移,这样能使面积尽量变大(实际上比一定变大了,只是尝试使他变大)。
我们可以发现,如果已经确定了最大容积S(i,j),我们可以发现

  • i左边和j右边肯定是比i,j的最小高度小的,如果比i,j最小高度高则最大容积则不可能是S(i,j);
  • i,j之间的区间就算比i,j高但宽度没有i,j大

代码

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

复杂度分析

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

以上是关于Leetcode11. 盛最多水的容器(双指针)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 11 - 盛最多水的容器 - [双指针暴力]

LeetCode 11.盛最多水的容器

LeetCode 11. 盛最多水的容器

双指针:盛最多水的容器(4.18leetcode每日一题)

11. 盛最多水的容器(双指针)

11. 盛最多水的容器(双指针)