HomeSoftware DevelopmentDiscover the Second Longest Rising Subsequence

Discover the Second Longest Rising Subsequence


#embrace <bits/stdc++.h>

utilizing namespace std;

  

int secondLis(int arr[], int n)

{

  

    

    

    

    vector<int> dpL(n, 1);

  

    

    

    

    

    vector<int> dpC(n, 1);

  

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < i; j++) {

            

            

            if (arr[i] <= arr[j])

                proceed;

  

            if (dpL[j] + 1 > dpL[i]) {

                

                

                

                

                

                

                dpL[i] = dpL[j] + 1;

                dpC[i] = dpC[j];

            }

            else if (dpL[j] + 1 == dpL[i])

  

                

                

                

                dpC[i] += dpC[j];

        }

    }

  

    

    int maxLength = 0;

    for (int i : dpL)

        maxLength = max(i, maxLength);

  

    

    int rely = 0;

  

    

    for (int i = 0; i < n; i++) {

  

        

        if (dpL[i] == maxLength)

            rely += dpC[i];

    }

  

    

    

    

    

    if (rely > 1) {

        return maxLength;

    }

    else {

        return maxLength - 1;

    }

}

  

int most important()

{

    int arr[] = { 1, -4, 3, 5, 9 };

    int n = sizeof(arr) / sizeof(arr[0]);

    printf("Size of second longest growing "

           "subsequence is %dn",

           secondLis(arr, n));

  

    return 0;

}

RELATED ARTICLES

Most Popular

Recent Comments