题解 | #盛水最多的容器#

盛水最多的容器

https://www.nowcoder.com/practice/3d8d6a8e516e4633a2244d2934e5aa47

class Solution:
    def maxArea(self , height: List[int]) -> int:
        # write code here
        if len(height) < 2:
            return 0
        
        left = 0
        right = len(height) - 1
        res = 0
        while left < right:
            water = (right-left)*min(height[left], height[right])
            res = max(res, water)

            if height[left] < height[right]: # 贪心思想
                left += 1
            else:
                right -= 1
        
        return res

解题思路

使用双指针贪心思想

  • 双指针分别指向两端,向中间靠拢;
  • 计算当前容器容量值,取历史最大值;
  • 利用贪心思想决定下标的变化,由于较长的一边比较短的一边更可能出现更大容积,因此当左指针对应的元素小于右指针对应的元素的时候,左指针加一;否则右指针减一。

复杂度

时间复杂度为O(N),空间复杂度为O(1)。

全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务