[LeetCode] Longest Increasing Subsequence 最长递增子序列的长度
2017-06-12 17:04
567 查看
声明:原题目转载自LeetCode,解答部分为原创
Problem :
Given an unsorted array of integers, find the length of longest increasing subsequence.
For example,
Given
The longest increasing subsequence is
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?
Solution:
思路:假定f(k)为数组前k位中最长递增子序列的长度,状态转换方程为
f(k) = max { max( f(i)+ 1, f(k)) },其中 i 为满足条件" i <= k && array[ i ] < array[ k ]" 的所有值
时间复杂度为O(n ^ 2),代码如下:
Problem :
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?
Solution:
思路:假定f(k)为数组前k位中最长递增子序列的长度,状态转换方程为
f(k) = max { max( f(i)+ 1, f(k)) },其中 i 为满足条件" i <= k && array[ i ] < array[ k ]" 的所有值
时间复杂度为O(n ^ 2),代码如下:
class Solution { public: int lengthOfLIS(vector<int>& nums) { vector<int> length(nums.size(), 1); int result = 1; for(int i = 0; i < nums.size(); i ++) { for(int j = 0; j < i; j ++) { if(nums[i] > nums[j]) length[i] = max(length[i], length[j] + 1); } result = max(result, length[i]); } return result; } };
相关文章推荐
- [LeetCode] Number of Longest Increasing Subsequence 最长递增序列的个数
- [LeetCode] Longest Continuous Increasing Subsequence 最长连续递增序列
- 最长递增子序列 (Longest Increasing Subsequence)
- POJ 3903-Stock Exchange/POJ 2533-Longest Ordered Subsequence(LIS-最长递增子序列长度)
- 最长递增子序列详解(longest increasing subsequence)
- 最长递增子序列 (LIS) Longest Increasing Subsequence
- [动态规划] 最长递增子序列 (Longest Increasing Subsequence)
- Leetcode 300 Longest Increasing Subsequence 最长递增子序列
- 动态规划之最长递增子序列(Longest Increasing Subsequence)
- 最长递增子序列详解(longest increasing subsequence)
- LeetCode-674:Longest Continuous Increasing Subsequence (最长连续增序列)
- 最长递增子序列 (Longest Increasing Subsequence)
- LeetCode 674. Longest Continuous Increasing Subsequence (最长连续递增序列)
- poj 2533:Longest Ordered Subsequence 求最长递增序列长度
- leetcode 674. Longest Continuous Increasing Subsequence 最长递增连续子序列
- 最长递增子序列详解(longest increasing subsequence)
- leetcode(300)—— Longest Increasing Subsequence(最长递增子序列)
- [LeetCode] 674. Longest Continuous Increasing Subsequence 最长连续递增序列
- LeetCode--Longest Increasing Subsequence (最长递增子序列)Python
- 最长递增子序列详解(longest increasing subsequence)