1. 程式人生 > 其它 >leetcode 演算法題 最長遞增子序列(LIS)

leetcode 演算法題 最長遞增子序列(LIS)

求一個序列的最長遞增子序列,這樣的子序列是允許中間越過一些字元的,即留“空”。

例如:4 2 3 1 5 的最長遞增子序列為 2 3 5,長度為 3 。

參考大神的思路,動態規劃以i為結尾的最長遞增子序列長度,最後找個最大值

參考連結:https://blog.csdn.net/qq_41765114/article/details/88415541

C++程式碼實現:

#include <iostream>
using namespace std;
int main(){
    int n;
    cin >> n;
    int arr[100];
    for(int i = 0;i < n;i++)
        cin >> arr[i];
    int dp[100] = {1};
    int high = 1;
 //   dp[0] = 1;
//    if(dp[1] > dp[0])
//        dp[1] = 2;
//    else if(dp[1] <= dp[0])
//        dp[1] = 1;
    int temp = 1;
    for(int i = 1;i < n;i++)
        {
            for(int j = i-1;j >= 0;j--)
            {
                if(arr[j] < arr[i])
                    temp = 1+dp[j];
                dp[i] = max(temp,dp[i]);
           //     high = max(high,dp[i]);
          //      cout << dp[i];
            }
          //  cout << " ";
            high = max(high,dp[i]);
        }
        
    cout << high << endl;
    return 0;
}