11. 盛最多水的容器

11. 盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49
方法
  1. 双指针

    面积大小由短板和两板之间的间距决定: S(i,j)=min(h[i],h[j])×(ji)

    将双指针分列数组两端,向内收缩可知:

    • 短板向内收缩未变长,则一定面积减小;变长,则面积可能增大
    • 长板向内收缩,短板不变,则面积一定减少

    因此,循环移动短板,更新面积最大值,直到指针相遇

    int maxArea(vector<int>& height) {
    // 存储所有方案中的最大值
    int mmax = 0;
    int* l = &height[0];
    int* r = &height[height.size() - 1];
    int idxl = 1;
    int idxr = height.size();
    while( l != r ) {
    int capacity = min(*l, *r) * (idxr - idxl);
    mmax = max(mmax, capacity);
    // 移动双指针
    if (*l > *r) { // 右边界小
    r --;
    idxr --;
    } else {
    l ++;
    idxl ++;
    }
    }
    return mmax;
    }
    • 时间复杂度: O(n) 双指针遍历数组长度
    • 空间复杂度: O(1)

posted on   SocialistYouth  阅读(7)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人

统计

点击右上角即可分享
微信分享提示