这是改过的。过了所有测试。复杂度O(n)。
#include
using namespace std;
inline int min(int a, int b) { return a < b ? a : b; }
int maxArea(int a[], int size) {
int mArea=0, area, left=0, right=size-1;
while(leftarea=(right-left) * min(a[left],a[right]);
if(area>mArea) mArea=area;
if(a[left]<=a[right]) {
int i=left;
while(ileft=i;
} else {
int j=right;
while(j>left && a[j]<=a[right]) j--;
right=j;
}
}
return mArea;
}
void main()
{
int arr_1[] = {4, 3, 5, 2, 1, 3, 2, 1 };
cout << maxArea(arr_1, 8) << endl;
int arr_2[] = {4, 3, 2, 1};
cout << maxArea(arr_2, 4) << endl;
int arr_3[] = {2, 3, 1, 1, 4};
cout << maxArea(arr_3, 5) << endl;
int arr_4[] = {2, 3, 10, 5, 7, 8, 9};
cout << maxArea(arr_4, 7) << endl;
int arr_5[] = {1, 2, 3, 4, 5};
cout << maxArea(arr_5, 5) << endl;
}