【Golang】LeetCode 11. 盛最多水的容器

11. 盛最多水的容器

题目描述

思路

这道题的思路比较简单,我们使用双指针来进行解决。

初始时我们设置左右两个指针,令l, r := 0, len(height) - 1

然后,我们开始对整个数组进行由两侧到中间的遍历,遍历的条件就是l < r

在遍历之前我们设置ans := 0 用于记录最终的答案。

每一次遍历的过程中,我们计算一次当前容器所能盛水的最大容量,计算公式就是curr := min(height[l], height[r]) * (r - l)

计算之后,我们对ans进行一次更新,即:ans = max(ans, curr)

最后,比较关键的是lr的移动策略。我们采用贪心的思路,每一次我们想要得到的答案实际上都是尽可能大的盛水容积,而较小的一侧的高度则是水容积计算的短板,因此我们比较当前height[l]height[r]的大小关系,如果height[l] > height[r],则令r --,否则l ++

基于以上思路,我们写代码来解决问题。

Golang 题解

go 复制代码
func maxArea(height []int) int {
    ans := 0
    l, r := 0, len(height) - 1
    for l < r {
        curr := min(height[l], height[r]) * (r - l)
        ans = max(ans, curr)
        if height[l] > height[r] {
            r --
        } else {
            l ++
        }
    }

    return ans
}

Python 题解

python 复制代码
class Solution:
    def maxArea(self, height: List[int]) -> int:
        ans, l, r = 0, 0, len(height) - 1
        while l < r:
            curr = min(height[l], height[r]) * (r - l)
            ans = max(ans, curr)

            if height[l] > height[r]:
                r -= 1
            else:
                l += 1
        return ans
相关推荐
菜菜的顾清寒28 分钟前
力扣HOT100(50)动态规划-零钱兑换
算法·leetcode·动态规划
8Qi833 分钟前
LeetCode 148. 排序链表 —— 解法二:自底向上归并(迭代,O(1) 空间)
数据结构·算法·leetcode·链表·归并·迭代
凯瑟琳.奥古斯特34 分钟前
力扣1235完整解法详解
java·开发语言·leetcode
凯瑟琳.奥古斯特1 小时前
力扣1001网格照明解法
算法·leetcode·职场和发展
郝学胜-神的一滴2 小时前
力扣 144:二叉树前序遍历的优雅实现
java·数据结构·c++·python·算法·leetcode·职场和发展
菜菜的顾清寒3 小时前
力扣HOT100(48)图论-腐烂的橘子
算法·leetcode·图论
fengxin_rou3 小时前
【滑动窗口与前缀和算法实战】:LeetCode560.438 高频题深度解析
java·算法·leetcode
Brilliantwxx3 小时前
【算法从零到千】【1-7】 双指针算法
开发语言·c++·笔记·算法·leetcode·推荐算法
菜菜的顾清寒3 小时前
力扣HOT100(49)动态规划 -- 打家劫舍
算法·leetcode·动态规划
玖釉-4 小时前
LeetCode Hot 100 知识点总结与算法指南
c++·windows·算法·leetcode