首页 > 代码库 > [leetcode-300-Longest Increasing Subsequence]
[leetcode-300-Longest Increasing Subsequence]
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?
Credits:
Special thanks to @pbrother for adding this problem and creating all test cases.
思路:
经典dp问题,定义dp数组,dp[i]代表0到i区间的最长递增子序列。状态转移方程为
dp[i] = max(dp[i], dp[j] + 1)。
int lengthOfLIS(vector<int>& nums) { int n = nums.size(),ret = 0; if (n == 0) return 0; vector<int>dp(n, 1); for (int i = 0; i < n;i++) { for (int j = 0; j < i; j++) { if(nums[i]>nums[j])dp[i] = max(dp[i], dp[j] + 1); } ret = max(ret, dp[i]); } return ret; }
参考:
http://www.cnblogs.com/yrbbest/p/5047816.html
[leetcode-300-Longest Increasing Subsequence]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。