How to Find the Length of the Longest Increasing Subsequence usi
- 时间:2020-09-18 17:01:02
- 分类:网络文摘
- 阅读:116 次
Given an unsorted array of integers, find the length of longest increasing subsequence.
Example:
Input: [10,9,2,5,3,7,101,18]
Output: 4
Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.Note:
There may be more than one LIS combination, it is only necessary for you to return the length.
Your algorithm should run in O(n^2) complexity.
Follow up: Could you improve it to O(nlogn) time complexity?
Length of the Longest Increasing Subsequence using DP Algorithm
Surely, we can bruteforce, but that will take O(2^n) complexity i.e. each number has two choices: take or not take. This is not ideal. We could use f[i] to represent the longest length subsequence that ending at element nums[i]. Thus, we can reduce the runtime complexity to O(N^2) by checking each pair of (nums[j], nums[i]) and update f[i] = max(f[i], f[j] + 1) if nums[j] is smaller than nums[i].
The Longest Increasing Subsequence (LIS) can be computed via the following Dynamic Programming Algorithm i.e. C++.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Solution { public: int lengthOfLIS(vector<int>& nums) { if (nums.empty()) return 0; vector<int> f(nums.size(), 1); int ans = 1; for (int i = 1; i < nums.size(); ++ i) { for (int j = 0; j < i; ++ j) { if (nums[j] < nums[i]) { f[i] = max(f[i], f[j] + 1); ans = max(ans, f[i]); } } } return ans; } }; |
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
if (nums.empty()) return 0;
vector<int> f(nums.size(), 1);
int ans = 1;
for (int i = 1; i < nums.size(); ++ i) {
for (int j = 0; j < i; ++ j) {
if (nums[j] < nums[i]) {
f[i] = max(f[i], f[j] + 1);
ans = max(ans, f[i]);
}
}
}
return ans;
}
};Then, we need to find out the maximum value in f[0] to f.back(). The space requirement is O(N).
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:搜狗SR值更新:好多网站SR值变1 SEO入门:三分钟带你了解权重 网站结构如何布局,会提高用户体验? 对于新站来说:如何让网站快速被搜索引擎收录呢? 网站内部优化细节流程(纯白帽SEO) 网站安全防止被黑客攻击的办法 我在落伍的那几年:一个个人站长的回忆录 给哪些网站暂时赚不到钱的站长鼓鼓劲 个人站长 建设网站贵在坚持 网站站长赚钱的6大好用的途径
- 评论列表
-
- 添加评论