Given an unsorted array of integers, find the length of longest increasing subsequence.
For example,
Given [10, 9, 2, 5, 3, 7, 101, 18],
The longest increasing subsequence is [2, 3, 7, 101], therefore the length is 4. Note that there may be more than one LIS combination, it is only necessary for you to return the length.
Your algorithm should run in O(n2) complexity.
Follow up: Could you improve it to O(n log n) time complexity?
class Solution { public: int lengthOfLIS(vector<int>& nums) { int size = nums.size(); if (size < 2) return size; int *dp = new int[size]; for (int i = 0; i < size; i++) { dp[i] = 1; } int res = 0; for (int i = 1; i < size; i++) { for (int j = 0; j < i; j++) { if (nums[i] > nums[j]) { dp[i] = max(dp[i], dp[j] + 1); } } res = max(res, dp[i]); } delete dp; return res; } };
本文介绍了一种求解最长递增子序列长度的问题,并提供了一个基于动态规划的解决方案。该算法的时间复杂度为O(n^2),同时讨论了如何进一步优化到O(n log n)的复杂度。
4348

被折叠的 条评论
为什么被折叠?



