Container With Most Water--MaxArea

寻找最大容量的两直线

给定n个非负正整数{a1,a2,a3,…,an}, 每个整数表示一个坐标{i,ai}. 他们表示x轴上的垂直直线,起点为{i, 0},终点为{i,ai}, 寻找两条直线,使得两条直线之间可容纳水最大。如图所示。

在这里插入图片描述
Example:

Input: [1,8,6,2,5,4,8,3,7]
Output: 49

分析:
方法1,双重遍历,计算每个点与其他所有点的最大容积,最后取最大值。时间复杂度O(n2).空间O(1)
方法2,观察可得知,容积受到两个参数的影响,其一为两个垂直直线中较小的一个,其二为横坐标长度。因此,可以双向开始遍历,记录每次的值,保留最大值,每次取小的直线位移。时间复杂度O(n),空间O(1)。

public static int maxArea(int[] height) {
int maxarea = 0, l = 0, r = height.length - 1;
while (l < r) {
maxarea = Math.max(maxarea, Math.min(height[l], height[r]) * (r - l));
if (height[l] < height[r])
l++;
else
r–;
}
return maxarea;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值