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?
链接: http://leetcode.com/problems/longest-increasing-subsequence/
题解:
求数组的最长递增子序列。经典dp问题,在很多大学讲DP的教程里,都会出现这道题以及Longest Common Subsequence。 这里其实也有O(nlogn)的方法,比如Patience Sorting一类的,二刷再研究。下面我们来看DP。这个问题一开始可以被分解为recursive的子问题,一步一步优化就可以得到带有memorization的iterative解法。初始化dp[i] = 1,即一个元素的递增序列。 假设以i - 1结尾的subarray里的LIS为dp[i - 1],那么我们要求以i结尾的subarray里的LIS,dp[i]的时候,要把这个新的元素和之前所有的元素进行比较,同时逐步比较dp[j] + 1与dp[i],假如发现更长的序列,我们则更新dp[i] = dp[j] + 1,继续增加j进行比较。当i之前的元素全部便利完毕以后,我们得到了当前以i结尾的subarray里的LIS,就是dp[i]。
Time Complexity - O(n2), Space Complexity - O(n2)。
public class Solution {
public int lengthOfLIS(int[] nums) {
if(nums == null || nums.length == 0) {
return 0;
}
int len = nums.length, max = 0;
int[] dp = new int[len];
for(int i = 0; i < len; i++) {
dp[i] = 1;
for(int j = 0; j < i; j++) {
if(nums[i] > nums[j] && dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
}
}
max = Math.max(max, dp[i]);
}
return max;
}
}
题外话:
#300题!又是一个里程碑了。虽然之前做的很多题目都忘记了,但相信二刷会好好巩固和再学习。微信群里一起刷题的小伙伴们,好多已经拿到了Amazon的Offer,我也要好好努力才行啊。这周休假在家,周三继续修理房子,希望一切顺利。 同时希望在这周能够把LeetCode第一遍完成,然后早日学习新的知识,比如多线程,设计模式,以及一些系统设计等等。
Reference:
https://leetcode.com/discuss/67609/short-java-solution-using-dp-o-n-log-n
https://leetcode.com/discuss/67554/9-lines-c-code-with-o-nlogn-complexity
https://leetcode.com/discuss/67533/c-typical-dp-2-solution-and-nlogn-solution-from-geekforgeek
https://leetcode.com/discuss/67565/simple-java-o-nlogn-solution
https://leetcode.com/discuss/71129/space-log-time-short-solution-without-additional-memory-java
https://leetcode.com/discuss/67687/c-o-nlogn-solution-with-explainations-4ms
https://leetcode.com/discuss/69309/c-o-nlogn-with-explanation-and-references
https://leetcode.com/discuss/67572/o-nlogn-and-o-n-2-java-solutions
https://leetcode.com/discuss/67689/4ms-o-nlogn-non-recursive-easy-to-understand-java-solution
https://leetcode.com/discuss/67553/share-java-dp-solution
https://leetcode.com/discuss/72127/easy-to-understand-solution-using-dp-with-video-explanation
https://leetcode.com/discuss/67806/another-o-n-log-n-python
http://www.geeksforgeeks.org/longest-monotonically-increasing-subsequence-size-n-log-n/
http://www.cs.cornell.edu/~wdtseng/icpc/notes/dp2.pdf
https://courses.engr.illinois.edu/cs473/sp2011/lectures/08_notes.pdf
http://www.cs.toronto.edu/~vassos/teaching/c73/handouts/lis.pdf
http://www.cs.mun.ca/~kol/courses/2711-w08/dynprog-2711.pdf
https://courses.cs.washington.edu/courses/cse417/02wi/slides/06dp-lis.pdf
https://www.cs.princeton.edu/courses/archive/spring13/cos423/lectures/LongestIncreasingSubsequence.pdf
https://en.wikipedia.org/wiki/Patience_sorting
https://en.wikipedia.org/wiki/Longest_increasing_subsequence
300. Longest Increasing Subsequence的更多相关文章
- [LeetCode] 300. Longest Increasing Subsequence 最长递增子序列
Given an unsorted array of integers, find the length of longest increasing subsequence. Example: Inp ...
- Leetcode 300 Longest Increasing Subsequence
Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...
- leetcode@ [300] Longest Increasing Subsequence (记忆化搜索)
https://leetcode.com/problems/longest-increasing-subsequence/ Given an unsorted array of integers, f ...
- [leetcode]300. Longest Increasing Subsequence最长递增子序列
Given an unsorted array of integers, find the length of longest increasing subsequence. Example: Inp ...
- 【leetcode】300.Longest Increasing Subsequence
Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...
- 300. Longest Increasing Subsequence(LIS最长递增子序列 动态规划)
Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...
- [leetcode] 300. Longest Increasing Subsequence (Medium)
题意: 求最长增长的子序列的长度. 思路: 利用DP存取以i作为最大点的子序列长度. Runtime: 20 ms, faster than 35.21% of C++ online submissi ...
- LeetCode 300. Longest Increasing Subsequence最长上升子序列 (C++/Java)
题目: Given an unsorted array of integers, find the length of longest increasing subsequence. Example: ...
- [LC] 300. Longest Increasing Subsequence
Given an unsorted array of integers, find the length of longest increasing subsequence. Example: Inp ...
随机推荐
- (转)要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。
要“jquery”ScriptResourceMapping.请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping.”的解决办法. 1.先将aspnet.scri ...
- pagebar
public static string GetPageBarStr(int pageIndex, int pageSize, int pageCount, int recordCount) ...
- Notes of the scrum meeting(12.5)
meeting time:18:00~18:30p.m.,December 5th,2013 meeting place:3号公寓一层 attendees: 顾育豪 ...
- JavaScript 函数调用
JavaScript 函数有 4 种调用方式. 每种方式的不同方式在于 this 的初始化. this 关键字 一般而言,在Javascript中,this指向函数执行时的当前对象. 注意 this ...
- Careercup - Google面试题 - 6407924087783424
2014-05-07 15:17 题目链接 原题: Given an array of n elements (a1,a2,..ai,...,an). You are allow to chose a ...
- android 高德地图出现【定位失败key鉴权失败】
如题:android 高德地图出现[定位失败key鉴权失败] 原因:使用的是debug模式下的SHA1,发布的版本正确获取SHA1的方式见: 方法二使用 keytool(jdk自带工具),按照如下步骤 ...
- css图片切换效果分析+翻译整理
Demos:http://tympanus.net/Tutorials/CSS3SlidingImagePanels/ 出处:http://tympanus.net/codrops/2012/01/1 ...
- 【BZOJ】【1046】/【POJ】【3613】【USACO 2007 Nov】Cow Relays 奶牛接力跑
倍增+Floyd 题解:http://www.cnblogs.com/lmnx/archive/2012/05/03/2481217.html 神题啊= =Floyd真是博大精深…… 题目大意为求S到 ...
- jQuery中的height()、innerheight()、outerheight()的区别总结
在前端jQuery代码中突然看到outerheight(),第一感觉就是,这是什么鬼?然后仔细查阅了一下,居然发现还有这么多相似的东西. 在jQuery中,获取元素高度的函数有3个,它们分别是heig ...
- 关于java调用linux shell 的问题
问题的提出: shell脚本要做离线的数据处理任务 java调用脚本,将这种处理任务封装成webservice 特点: shell处理单个时间长 每次要处理文件量大 这里目前只做调用分析: 原来的: ...