动态规划中级教程300.Longest Increasing Subsequence
来源:互联网 发布:单片机方案公司 编辑:程序博客网 时间:2024/06/03 17:04
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.
最长上升子序列问题LIS先不思考二分的解法我们先考虑动态规划O(n2)的解法
先看例子【10,9,2,5,3,7,101,18】
【10】dp【0】=1;只有一个10
【10,9】dp【1】=1;9比10小,只有长度为1的LIS
【10,9,2】dp【2】=1;2比9,10小
【10,9,2,5】dp【3】=2;5>2我们先假设dp【i】=1+dp【i-1】是状态转移
【10,9,2,5,3】dp【4】=2;3<5但是dp【4】=2,思考我们这时的2是由于3>2导致的不如假设dp【i】=max(所有的小于i的j值)(dp【j】+1)
【10,9,2,5,3,7】dp【5】=3;用上一个状态转移ok
【10,9,2,5,3,7,101】dp【6】=4;用上一个状态转移ok
【10,9,2,5,3,7,101,18】dp【7】=4;用上一个状态转移ok
写代码试下
int max(int a,int b){ return a>b?a:b; }int lengthOfLIS(int* nums, int numsSize) { if(numsSize<=1) { return numsSize; } int dp[numsSize]; for(int i=0;i<numsSize;i++) { dp[i]=1; } dp[0]=1; int ans=dp[0]; for(int i=1;i<numsSize;i++) { for(int j=0;j<i;j++) { if(nums[i]>nums[j]) { dp[i]=max(dp[i],dp[j]+1); ans=max(ans,dp[i]); } } } return ans;}
- 动态规划中级教程300.Longest Increasing Subsequence
- 动态规划-300. Longest Increasing Subsequence
- 300.LeetCode Longest Increasing Subsequence(medium)[动态规划]
- leetcode 300. Longest Increasing Subsequence-最长子序列|动态规划
- 300. Longest Increasing Subsequence 类别:动态规划 难度:medium
- leetcode-300-Longest Increasing Subsequence 动态规划
- [动态规划-1] 最长递增子序列-Longest Increasing Subsequence
- [动态规划] 最长递增子序列 (Longest Increasing Subsequence)
- 动态规划求最长递增子序列(longest increasing subsequence)
- 动态规划-673Number of Longest Increasing Subsequence
- leetcode 673. Number of Longest Increasing Subsequence 动态规划DP
- 300. Longest Increasing Subsequence
- 300. Longest Increasing Subsequence
- 300. Longest Increasing Subsequence
- 300. Longest Increasing Subsequence
- 300. Longest Increasing Subsequence
- 300. Longest Increasing Subsequence
- 300. Longest Increasing Subsequence
- MVC过滤器的使用
- A. Rational Resistance----贪心
- 命令行更新scikit-learn
- 实时加载页面的内容loading(主要针对图片)
- 软件自动更新的实现
- 动态规划中级教程300.Longest Increasing Subsequence
- ScrollView中ViewPager无法正常滑动问题
- Ubuntu中的查找命令
- 杭电OJ 1001
- JAVA正则表达式
- 百练_4098:第二大价值
- A
- [工具]maven介绍
- 2017 Multi-University Training Contest 1001 (简单)(技巧)