300. Longest Increasing Subsequence
来源:互联网 发布:java语言培训哪家好 编辑:程序博客网 时间:2024/06/10 01:20
最长递增子序列问题,子序列可以不连续
牛客网有讲
建一个辅助数组arr,arr[i]记录i+1长度的最长递增子序列的最小结尾
首先将第一个位置初始化为原数组的第一个位置的值
遍历原数组,比较原数组的值与辅助数组有效区的值 找到有效区中第一个比这个值大的位置将这个数填到这个位置 那么这个位置的索引值+1 就以刚才这个值结尾的最长递增子序列的长度 如果有效区的值都比这个值小那就在最后加长这个有效区
记一个全局变量 来记录这个最大值
public class Solution { public int lengthOfLIS(int[] nums) { if(nums.length==0) return 0; int []arr=new int[nums.length]; arr[0]=nums[0]; int max=1; for(int i=1;i<nums.length;i++){ if(arr[max-1]<nums[i]) { arr[max++]=nums[i]; } for(int j=0;j<max;j++){ if(arr[j]>=nums[i]) {arr[j]=nums[i]; break; } } } return max; }}
dp方法:
建一个辅助数组
记录以i位置结尾的最长递增子序列的长度,每次将原数组nums[i]位置的值与nums[0-(i-1)]位置的数值进行比较如果大,则将对应位置的arr值+1记录下来遍历之后取最大值就是此位置的最长递增子序列的长度
public class Solution { public int lengthOfLIS(int[] nums) { if(nums.length==0) return 0; int []arr=new int[nums.length]; int max=0; arr[0]=1; for(int i=1;i<nums.length;i++){ for(int j=0;j<i;j++){ if(nums[i]>nums[j]) arr[i]=Math.max(arr[j]+1,arr[i]); } if (arr[i]==0) arr[i]=1; //如果小 那么这个时候arr[i]=0 +1 这是截止到目前最小的值 } for(int i=0;i<arr.length;i++){ max=Math.max(max,arr[i]); } return max; }}
0 0
- 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
- 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
- 300. Longest Increasing Subsequence
- 300. Longest Increasing Subsequence
- 300. Longest Increasing Subsequence
- 300. Longest Increasing Subsequence
- 某个服务的调用顺序
- UVAlive 6525 二分图匹配
- miniblink渲染架构重整
- 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理
- CodeForces 474EPillars(线断树区间最大)
- 300. Longest Increasing Subsequence
- RC522读卡器 M1卡学习总结(二)
- NOIP2015普及组 金币
- JDBC--使用statement接口实现更新数据
- 简单算法之插入排序及其优化shell排序
- Go语言基础:并发
- makefile
- http://www.cnblogs.com/spring87/p/4496930.html
- linux和windows的进程的虚拟地址空间