给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
说明:
- 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
- 你算法的时间复杂度应该为 O(n2) 。
dp[i]表示以nums[i]为结尾的最大长度的子序列
class Solution
{
public:
int lengthOfLIS(vector<int> &nums)
{
int n = nums.size();
vector<int> dp(n, 1);
int ans = 1;
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if(nums[j] > nums[i] && dp[i] >= dp[j])
{
dp[j] = dp[i] + 1;
}
}
}
for(int i : dp)
{
ans = i > ans ? i : ans;
}
return nums.size() == 0? 0 : ans;
}
};

本文介绍了一种求解最长上升子序列长度的方法,通过动态规划算法实现。以一个无序整数数组为例,详细展示了如何计算最长上升子序列的长度。
737

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



