盛最多水的容器
题目
解法
本题采用暴力解法会超时,所以采用双指针
双指针解题过程
在初始时,左右指针分别指向数组的左右两端,然后计算对应情况下的水量,然后挪动其中 一个指针进行下一步,这里需要挪动高度低的一方,因为这个水量的计算取决于那个低的边。循环执行直到两个指针重合。
采用双指针原因
双指针代表的是 可以作为容器边界的所有位置的范围。
在一开始,双指针指向数组的左右边界,表示 数组中所有的位置都可以作为容器的边界,因为我们还没有进行过任何尝试。在这之后,我们每次将 对应的数字较小的那个指针 往 另一个指针 的方向移动一个位置,就表示我们认为 这个指针不可能再作为容器的边界了。
代码实现
class Solution {
public int maxArea(int[] height) {
int maxnum = 0;
int num=0;
int index1=0,index2=height.length-1;
while(index1<index2){
if(height[index1]<height[index2]){
num=height[index1]*(index2-index1);
index1++;
}else{
num=height[index2]*(index2-index1);
index2--;
}
if(maxnum<num){
maxnum=num;
}
}
return maxnum;
}
}