【力扣 092】300. 最長遞增子序列
阿新 • • 發佈:2022-05-21
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; } };