题目来源:leetcode300 最长上升子序列 题目描述: 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子序列的组合 ...
分类:
其他好文 时间:
2020-07-17 09:30:26
阅读次数:
61
题意:给定一个长度为n的序列,可以修改任何一个字符,求修改后最长的单调严格上升子序列(必须是连续的)。 分析:\((1 <= n < 10^5)\),数据范围很大,不能使用$o(n^2)$的算法。所以我们可以从线性角度考虑,一种常见的套路是枚举修改点,然后求最大值。我们只需要分别求出两端的情况即可, ...
分类:
其他好文 时间:
2020-07-15 23:25:08
阅读次数:
90
POJ2279 Mr. Young's Picture Permutations 有N个学生合影,站成左对齐的k排,每行分别有N1,N2…NK个人,第一排站最后,第k排站之前。学生身高依次是1…N。在合影时候要求每一排从左到右递减,每一列从后面到前也递减,一共有多少总方案 Input 输入每组测试数 ...
分类:
其他好文 时间:
2020-07-11 12:37:35
阅读次数:
71
简单DP入门学习 众所周知,DP(dynamic Programming)是在没有特定的套路,刚学的真的摸不着头脑~~(对,没错就是我)~~ 所以记录一下DP的学习过程(我枯了,大佬快救救孩子吧) 一、DP的典型题型 1、01背包 2、完全背包 3、最长上升子序列 3.1例题 最长上升子序列LIs ...
分类:
其他好文 时间:
2020-07-10 15:17:29
阅读次数:
87
354. 俄罗斯套娃信封问题 描述: 思路:先按照第一个维度排序,第一维度相同时,第二维度降序。然后对第二维度进行最长上升子序列。(第二维度降序是为了避免同长度下的嵌套) 355. 设计推特 描述: 思路:通过一个map来维护一个用户发的推文。(推文对象之间用链表连接)。然后用一个优先队列得出10个 ...
分类:
其他好文 时间:
2020-07-10 12:59:48
阅读次数:
79
题目描述 分析 第一次看这道题首先想到的就是时间复杂度为$\ n^{2}$的求最长上升子序列 for(int i=1;i<=n;i++){ f[i]=1; for(int j=1;j<i;j++){ if((a[i]&a[j])!=0) f[i]=max(f[i],f[j]+1); } ans=ma ...
分类:
其他好文 时间:
2020-07-08 19:29:07
阅读次数:
37
方法一: 动态规划 (O(n)) class Solution { public int lengthOfLIS(int[] nums) { int n = nums.length; if(n < 2) return n; int[] dp = new int[n+1]; // dp[i] : 以第 ...
分类:
其他好文 时间:
2020-07-08 13:12:25
阅读次数:
53
原型:最长上升子序列 分析 状态表示:所有以a[i]结尾的严格单调上升的子序列的Max长度 状态划分依据:以最后一个不同的点 状态方程:dp[i] = max(dp[i], dp[j] + 1), j必须要小于i for(int i = 1; i <= n; i++) { dp[i] = 1; fo ...
分类:
其他好文 时间:
2020-07-05 17:12:16
阅读次数:
54
给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) ...
分类:
其他好文 时间:
2020-07-05 00:38:37
阅读次数:
49
如果不存在就不用去求最大值了,我们只求存在的最大值 如果存在,比如上一个数是j,且a[j] < a[i] aj ai这种情况 dp[j] + 1 所以dp[i] = max(dp[j] + 1),需满足aj < ai,j = 0, 1, ..., i - 1 时间复杂度:n * n 1 #inclu ...
分类:
其他好文 时间:
2020-07-03 12:26:35
阅读次数:
53