• 最长递增子序列


    给定一个已知数组: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;
    }
    
  • 相关阅读:
    js语言结构小记(一)
    jquery插件:fancybox
    转载(深刻地了解到了js数组是引用类型)
    sqlite 页面结构分析
    有限状态机(FSM)的设计与实现(二)
    sqlite源码中的一个潜在Bug
    一种整数数据压缩存储的算法实现
    构建自己的内存池(一)
    sqlite Btree结构分析
    构建自己的内存池(二)
  • 原文地址:https://www.cnblogs.com/achao123456/p/8653061.html
Copyright © 2020-2023  润新知