题目
题解
无所谓,我会暴力求解。结果超时。
int maxArea(int* height, int heightSize){
int max = 0;
for(int i = 0;i < heightSize-1;i++){
for(int j = i+1;j < heightSize;j++){
int gao = height[i]<height[j]? height[i]:height[j];
int chang = j-i;
int mianji = gao*chang;
max = mianji>max? mianji:max;
}
}
return max;
}
2.
int maxArea(int* height, int heightSize){
int begin = 0;
int end = heightSize-1;
int temp_h = height[begin]<height[end]? height[begin]:height[end];
int temp_s = temp_h*(end-begin);
while(end > begin){
int count_h = height[begin]<height[end]? height[begin]:height[end];
if(count_h > temp_h){
int count_s = count_h*(end-begin);
if(count_s > temp_s){
temp_s = count_s;
temp_h = count_h;
}
}
if(height[end]<height[begin]){
end--;
}else{
begin++;
}
}
return temp_s;
}
要点
1.本质求解宽乘高的面积,宽是索引差,高是两个索引对应的高度中取最小的那个。设置两个指针在开始处和末尾处,后续不断将两个指针往里进,所以宽会缩小,要想取得更大面积就要找到更大的高。这就引出了往里进的规则两边的指针,哪个对应的高更小哪个往里进。