AC: 分为两种情况,一种是当前数组是非降序的,直接输出n即可。如果当前数组不是非降序的,那么我们分别对前一半和后一半数组进行求解。找到最大长度即可。
#include<stdio.h>
//求两者之间最大值
int Max(int a,int b)
{
return a > b ? a : b;
}
//寻找最长的子数组
int GetMax(int a[],int left,int right)
{
int mid = (left + right)/2;
int flag = 1;
for(int j = left + 1; j <= right; j++)
{
if(a[j] < a[j - 1])
{
flag = 0;
break;
}
}
if(flag)
return right - left + 1;;
return Max(GetMax(a,left, mid), GetMax(a,mid + 1, right));
}
int main()
{
int T;
scanf("%d",&T);
while(T -- )
{
int n;
scanf("%d",&n);
int a[n];
for(int i = 0;i < n;i++)
{
scanf("%d",&a[i]);
}
int max = GetMax(a,0,n - 1);
printf("%d\n",max);
}
return 0;
}