/************本模块功能如下************/
/*现在有一个数组 我们可以定义数组的子数组
如 数组 1 3 4 2 5 8 7
它的子数组可以是 1 3 4 3 4 2 5 等等
请写一个算法 找一个子数组 这个子数组递增不减少 并且是满足递增不减的最长子数组
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i,k=0,len=1;
int maxlen=1; //保存最大递增不减子数组长度
int first=0; //保存递增不减子数组的首元素下标
int low=0; //保存最大递增不减子数组的首元素下标
int *array;
printf("请输入数组元素的个数:");
scanf("%d\n",&n);
if(n<=0)
{
printf("数组长度必须为正整数,请再次输入:");
printf("请输入数组元素的个数:");
scanf("%d\n",&n);
}
array=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
{
scanf("%d",&array[i]);
}
// for(i=0;i<n;i++)
// {
// printf("%d ",array[i]);
// }
printf("\n");
while(k<n)
{
if(array[k+1]<array[k])
{
k++;
len=1;
continue;
}
while(array[k+1]>=array[k])
{
if(len==1)
{
first=k;
}
len++;
k++;
}
if(maxlen<len)
{
maxlen=len;
low=first;
}
}
printf("只増不减最长子数组长度是%d\n",maxlen);
printf("只増不减最长子数组是:");
for(i=low;i<low+maxlen;i++)
printf("%d ",array[i]);
printf("\n");
}
但是这个算法的时间复杂度是O(n*n),用动态规划的思想只需O(n)的时间复杂度!代码继续学习中。。。。。。。