时间复杂度O(n):查找盛最多水的容器
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。

此题仅遍历一遍数组,关键是用双指针从数组两端开始查找
我的思路:
- 容器宽为width=right-left,高为heightMin
- right和left初始为数组第一个索引和最后一个索引,高为两个元素中的最小值
- 使用while循环让左右指针移动,直到两指针相遇遍历完数组。同时计算每一次的面积,与上一次的面积比较。
我的代码:
//定义左右指针,初始值分别是数组最左和最右的索引
int left = 0;
int right = height.length-1;
int maxArea = 0; //存储最大面积
//让左右指针遍历完数组,循环条件是左右指针未相遇
while(left < right){
//计算当前的高,宽和面积
int heightMin = Math.min(height[left],height[right]);
int width = right - left;
int area = width * heightMin;
//更新最大面积
maxArea = Math.max(area,maxArea);
//移动指针
if(height[left]<height[right]){
left++;
}else{
right--;
}
}
return maxArea;
所有正文内容皆为本人原创,禁止搬运

浙公网安备 33010602011771号