我的C解法
#include <stdio.h>
int maxValue(int x, int y) {
if (x <= y) {
return y;
} else {
return x;
}
}
int minValue(int x, int y) {
if (x <= y) {
return x;
} else {
return y;
}
}
int maxArea(int* height, int heightSize) {
int area = 0;
int left = 0;
int right = 0;
int i = 0;
int j = heightSize - 1;
while (i < j) {
int min = minValue(left, right);
int tmp = min * (j - i);
area = maxValue(tmp, area);
printf("area_tmp = %d i = %d j = %d\n", area,i,j);
if (left <= right) {
while (height[i] <= left) {
i ++;
if (i >= j) { break;}
}
left = height[i];
} else {
while (height[j] <= right) {
j --;
if (i >= j) { break;}
}
right = height[j];
}
}
return area;
}
int main(int argc, const char * argv[]) {
int a[] = {1,8,20,2,5,4,8,29,10,8};
int len = sizeof(a)/sizeof(int);
int x = maxArea(a, len);
printf("len = %d\n",len);
printf("area = %d\n",x);
return 0;
}
别人的C解法
int maxArea(int* height, int heightSize) {
int left = 0;
int right = heightSize - 1;
int area = 0;
while(left < right) {
int a = (right - left) * ((height[left] > height[right])? height[right] : height[left]);
if(a > area)
area = a;
if(height[left] > height[right])
right--;
else
left++;
}
return area;
}
网友评论