1. 程式人生 > 其它 >【力扣 092】300. 最長遞增子序列

【力扣 092】300. 最長遞增子序列

300. 最長遞增子序列

給你一個整數陣列 nums ,找到其中最長嚴格遞增子序列的長度。

子序列 是由陣列派生而來的序列,刪除(或不刪除)陣列中的元素而不改變其餘元素的順序。例如,[3,6,2,7] 是陣列 [0,3,1,6,2,2,7] 的子序列。

 
示例 1:

輸入:nums = [10,9,2,5,3,7,101,18]
輸出:4
解釋:最長遞增子序列是 [2,3,7,101],因此長度為 4 。
示例 2:

輸入:nums = [0,1,0,3,2,3]
輸出:4
示例 3:

輸入:nums = [7,7,7,7,7,7,7]
輸出:1
 

提示:

1 <= nums.length <= 2500
-104 <= nums[i] <= 104
 

進階:

你能將演算法的時間複雜度降低到 O(n log(n)) 嗎?

來源:力扣(LeetCode)
連結:https://leetcode.cn/problems/longest-increasing-subsequence
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

程式碼實現:

class Solution
{
public:
  int lengthOfLIS(vector<int> &nums)
  {
    int res = 0;
    vector<int> dp(nums.size());
    for (int i = 0; i < nums.size(); ++i)
    {
      int temp = 1;
      for (int j = 0; j < i; ++j)
      {
        if (nums[i] > nums[j])
          temp = max(temp, dp[j] + 1);
      }
      dp[i] = temp;
      res = max(res, dp[i]);
    }
    return res;
  }
};