LeetCode100 11. 盛最多水的容器

从两遍向中间遍历

水桶在越来越窄的情况下只有换短板才有可能通过增加高度从而增加盛水量。

假设左矮右高:面积由左边短板决定。如果移动右指针,宽度变小,短板还是左边,面积一定不会更大;只有移动短板,才有可能找到更高的挡板,面积变大。

复制代码
class Solution {
    public int maxArea(int[] height) {
        int l = 0;
        int r = height.length - 1;
        int maxVolume = 0;

        while (l != r) {
            // 面积 = 两根柱子较矮的高度 × 两根柱子之间的距离
            maxVolume = Math.max(maxVolume, Math.min(height[l], height[r]) * (r - l));
            // 移动较矮一侧的指针(短板决定高度,移动高板面积只会更小)
            if (height[l] <= height[r]) {
                l++;                        // 左矮,右移左指针,试图找到更高的左板
            } else {
                r--;                        // 右矮,左移右指针,试图找到更高的右板
            }
        }
        return maxVolume;
    }
}

时间复杂度:O(N),双指针总计最多遍历整个数组一次。

空间复杂度:O(1)

相关推荐
骑着蜗牛撵大象3272 小时前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
Eyfcom2 小时前
〖阶段性回顾〗物流系统架构与算法的 Day 1-5 知识图谱与实战答疑
算法·系统架构·知识图谱·物流管理系统·快递管理系统
xunberg2 小时前
【Agent 生产化手记-02】Agent 怎么向人提问
人工智能·算法·架构
海绵宝宝转agent2 小时前
Leetcode二叉树算法个人理解
笔记·学习·算法·leetcode·深度优先
Rain的Java大神之路2 小时前
面试被LeetCode 27(移除元素)问懵?别再用两层 for 循环了:一道“简单题”吃透双指针原地删除,附面试加分话术 + 11 个避坑清单
后端·leetcode·面试
pjj198542 小时前
YOLO 目标检测算法系列梳理:从 V1 到 V5 的原理演进
算法·yolo·目标检测
二十七日秋3 小时前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
晚风叙码3 小时前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
silvamux_3 小时前
微头条爆款体平台适配实测:把交付要求变成可计算的指标
java·线性代数·算法·决策树·矩阵