***设计思路***假设数组a[n]={2,3,4,1,5,6,7,3},用max来记录最长子序列的长度,则从a[0]开始,寻找不递增的点,并用count变量记录这个递增序列的长度,是a[3],此时count=3,max=3,则下次只需从a[3]开始向后遍历,找不递增的点,是a[7],此时count=4>max,则更max=count,从a[7]开始继续寻找,是a[8],此时count=1,max不变,所以最后max=4,并从a[3]开始依次向后输出max个数即可。
源代码
#include<iostream>
using namespace std;
void search(int a[],int n)
{
int count,j=0;
int max=0,b,c;//max中存放最长单调递增数量
for(int i=j;i<n;i++) //从上次寻找到不递增的位次开始向下寻找
{
count=1;
b=a[i];
for(int j=i+1;j<n;j++)//从i+1位开始依次向后找递增序列
{
if(a[j]>b)//如果是递增,则数量count+1
{
b=a[j];
count++;
}
if(a[j]<b)//如果第j为不递增了,则终止
break;
}
if(count>max)
{
max=count;//将最长序列的个数赋给max
c=i;
}
}
for(int k=c;k<c+max;k++)//从第i位开始进行输出,长度为max
{
cout<<a[k]<<" ";
}
}
int main()
{
int n;
cout<<"请输入数组的长度:";
cin>>n;
int *a=new int[n];
cout<<"请输入数组a[n]=";
for(int i=0;i<n;i++)
{
cin>>a[i];
}
search(a,n);
}
运行结果