最长递增子序列

给定一个已知数组: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值