最长递增子序列

给定一个已知数组:array[7]={1,5,9,3,4,11,5},找出最长递增子序列,返回其长度。

答案:4

即:1 5 9 11

解题思路:

给定一个与该数组长度一样的数组dp[7]={0},dp[i-1]记录以array[i]为结尾的最长递增子序列,如果array[i] > array[i-1]的话,那么dp[i]=dp[i-1]+1,否则忽略;

代码实现思路:

  1 <= i < 7

  对于这6个元素,分别以他们6个为结尾,然后对比他们与前一个元素的大小关系,然后进行加操作或者无操作。

  每次进行比较前,都要找到前面所有项中最长的子序列长度记为_max;

  然后看看本元素是不是大于之前的所有元素,如果不是就不能算作递增的,进行下一项。

#include <iostream>  
#include <algorithm>  

using namespace std;  

int num[7]={1,5,9,3,4,11,5};
int  dp[7]={0};

int process(int array[],int n)
{
	//起始项赋值为1 
	dp[0]=1;
	int _max=0;
	int j=0;int k=0;
	
	for(int i=1;i<n;i++)
	{
		
		//找到前边i-1项里最长的递增序列长度值 
		for(j=0;j<=i-1;j++)
		{
			if(_max<dp[j])
			{
				_max=dp[j];
			}	
		}
		
		int flag=1;
		
		//确认i项是不是大于前边所有项 
		for(k=0;k<i-1;k++)
		{
			if(array[i]<array[k])
			{
				flag=0;
				break;	
			}
		}
		
		if(flag)
		{
			dp[i]=_max+1;
		}
	}
	
	int maxLen=0;
	for(int i=0;i<n;i++)
	{
		if(maxLen<dp[i])
		{
			maxLen=dp[i];
		}
	}
	
	return maxLen;
}

int main()
{
	cout<<process(num,7)<<endl;
}
原文地址:https://www.cnblogs.com/achao123456/p/8653061.html