zoukankan      html  css  js  c++  java
  • 牛牛的数列 最长递增子序列

    题目:

    https://www.nowcoder.com/questionTerminal/4e1012fe691b446d88eba5db8f511692

    要求一个最长连续子序列,这个序列中只更改一个数字,便是最长连续递增子序列。

    设更改的数字位于A[i],对A[i],计算出以A[i-1]为结尾的最长递增子序列,以A[i+1]为开始的最长子序列,再根据A[i-1] 与 A[i+1]的大小关系,确定更改A[i]时的最长连续递增子序列的长度。

    #include <iostream>
    #include <algorithm>
    #include <stdio.h>
    
    using namespace std;
    
    const int maxn = 100000 + 5;
    const int INF = 0x3f3f3f3f;
    
    int data[maxn], n;
    int dp[maxn], dp1[maxn];
    int main()
    {
        int n;
        scanf( "%d", &n );
        for( int i = 0; i < n; i++ )
        {
            scanf( "%d", data+i );
        }
    
    
            //dp[i],以data[i]开始的最长上升子序列的长度
            dp[ n -1 ] = 1;
    
            for( int i = n-2; i >= 0; i-- )
            {
                if( data[i] < data[i+1] )
                {
                    dp[i] = dp[i+1] + 1;
                }
                else
                {
                    dp[i] = 1;
                }
            }
    
            //dp1[i],以data[i]结尾的最长上升子序列的长度
            dp1[ 0 ] = 1;
            for( int i = 1; i < n; i++ )
            {
                if( data[i] > data[i-1] )
                {
                    dp1[i] = dp1[i-1] + 1;
                }
                else
                {
                    dp1[i] = 1;
                }
            }
    
            int myMax = 1;
            int m = 1;
            for( int i = 0;  i < n-1; i++ )
            {
                if( i == 0 )
                {
                    m = dp[i+1] + 1;
                }
                else if( i == n-1 )
                {
                    m = dp1[i-1] + 1;
                }
                else if( data[i-1] + 1 < data[i+1] )
                {
                    m = dp[i+1] + dp1[i-1] + 1;
                }
                else
                {
                    m = max( dp[i+1] + 1, dp1[i-1] + 1 );
                }
                if( m > myMax )
                {
                    myMax = m;
                }
            }
            cout << myMax << endl;
    
        return 0;
    }
  • 相关阅读:
    书_Delphi
    20160226
    SVG_style_script
    辅助
    电影_Z
    Windows下软件调试
    20160221
    Qt5.3.2_vs10_发布时所需DLL的路径
    android intent 传数据
    android 消息机制
  • 原文地址:https://www.cnblogs.com/wangzhiyi/p/6884280.html
Copyright © 2011-2022 走看看