leetcode 演算法題 最長遞增子序列(LIS)
阿新 • • 發佈:2020-12-26
求一個序列的最長遞增子序列,這樣的子序列是允許中間越過一些字元的,即留“空”。
例如: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; }