11. 盛最多水的容器

Posted 心脏dance

tags:

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

题目链接:力扣

思路:首先吐槽下kotlin的for循环(我感觉kotlin的for循环真的好难用),还有就是啥时候有一种语言,各种集合的遍历方式是统一的就好了(目前在我的认知里面还没有)。

这道题目是典型的双指针问题。定义两个指针 i,j ,然后开始遍历height数组即可。怎么遍历呢?首先我们需要思考下,在宽度一定的情况下,高是怎么确定的呢?很简单,因为是装水,所以高是通过矮的那边确定的。这样我们就可以做了。找到宽(j-i),找到高(左右指针指向的较矮的那边的高度),两者相乘即可。然后较矮的那边的指针就可以移动了,因为在高一定的情况下,枚举到的状态已经是宽最大的情况了。所以只需要较矮的那边移动即可。每次求出一个值,都取下最大值,这样遍历一遍得到的值就是我们想要的答案。

简单分析下时间复杂度:可以看出我们只需要遍历一遍height数组就可以了,所以说时间复杂度为 O(n)

最后提一下,这个题也算是双指针的经典题目了(个人见解),大家可以好好悟一下。有不懂的可以在评论区回复哦~~~

上代码:

import kotlin.math.max

class Solution 
    fun maxArea(height: IntArray): Int 
        var i = 0
        var j = height.size - 1
        var result = 0
        while (i < j) 
            if (height[i] < height[j]) 
                result = max(result, height[i] * (j - i))
                i++
             else 
                result = max(result, height[j] * (j - i))
                j--
            
        
        return result
    

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

LeetCode11-盛最多水的容器

11. 盛最多水的容器

11. 盛最多水的容器

LeetCode:盛最多水的容器11

算法leetcode|11. 盛最多水的容器(rust重拳出击)

算法leetcode|11. 盛最多水的容器(rust重拳出击)