先看题目
题目还画了图,看起来有点复杂,其实静下来想一想并没有
有两个思路
1.暴力
两个循环遍历每一种可能的情况
for(int i = 0; i < height.length; i++){
for(int j = i; j<i; j++){
xxxxxx
}
}
但这样有个问题就是时间花费较大,两次循环遍历了每一种可能的情况(On(n^2))
2.双指针
分别指向一头一尾,为什么这样可以呢。这么思考,如果等高的话,线段间隔越远面积越大,而移动指针的时候,移动高度较小的指针带来的收益可能更大,因为即便间隔缩短了但高度可能增加了。这种做法时间花费就小了,因为用双指针只需要遍历一次数组On(n)
直接上代码
class Solution {
public int maxArea(int[] height) {
int temp_max = 0;
int left = 0;
int right = height.length - 1;
while(left < right){
if((right - left)*Math.min(height[left], height[right]) > temp_max){
temp_max = (right - left)*Math.min(height[left], height[right]);
}
if(height[left] < height[right]){
left ++;
}else{
right --;
}
}
return temp_max;
}
}