题目地址:
题目描述:
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。

示例:
输入:[1,8,6,2,5,4,8,3,7] 输出:49
解题思路:
方法一:
1.遍历数组暴力求解。
方法二:
1.通过两个指针一个放在开始,一个放在末尾,在数组间移动,使得程序的时间复杂度降到O(n).移动时存储面积最大值。
代码:
//方法一
class Solution {
public int maxArea(int[] height) {
int max = 0;
for(int i = 0; i < height.length - 1; i++){
for(int j = i + 1; j < height.length; j++){
if((j - i)*Math.min(height[i],height[j])>max) max = (j-i)*Math.min(height[i],height[j]);
}
}
return max;
}
}
//方法二
public class Solution {
public int maxArea(int[] height) {
int max = 0, l = 0, r = height.length - 1;
while (l < r) {
if(max < (r - l) * Math.min(height[l], height[r])) max = (r - l) * Math.min(height[l], height[r]);
if (height[l] < height[r])
l++;
else
r--;
}
return max;
}
}
本文探讨了在给定的非负整数数组中寻找两条线,使其与x轴构成的容器能容纳最多水的问题。提供了两种解决方案,一种是暴力求解,另一种是通过双指针技巧将时间复杂度降至O(n),并附带了详细的代码实现。
&spm=1001.2101.3001.5002&articleId=105417143&d=1&t=3&u=dbd1e89a5b664be8a46c85dd0967c266)
2771

被折叠的 条评论
为什么被折叠?



