/************本模塊功能如下************/
/*現在有一個數組 我們可以定義數組的子數組
如 數組 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)的時間複雜度!代碼繼續學習中。。。。。。。