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。
方法
-
双指针
面积大小由短板和两板之间的间距决定: S(i,j)=min(h[i],h[j])×(j−i)
将双指针分列数组两端,向内收缩可知:
- 短板向内收缩未变长,则一定面积减小;变长,则面积可能增大
- 长板向内收缩,短板不变,则面积一定减少
因此,循环移动短板,更新面积最大值,直到指针相遇
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 2023-04-29 23:40 SocialistYouth 阅读(7) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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训练数据并当服务器共享给他人