Leetcode 300. Longest Increasing Subsequence 最长的递增子序列 dp
2020-04-21 23:24
701 查看
300. Longest Increasing Subsequence
给出一个整数构成的数组,找到最长的递增子序列的长度。
Given an unsorted array of integers, find the length of longest increasing subsequence.
Example:
Input: [10,9,2,5,3,7,101,18] Output: 4 Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.
Note:
- 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?
解法:利用一个
dp数组,其中
dp[i]代表使用第
i个元素的最长递增子序列,
dp[0]=1,更新
dp[i]采用如下的方法:
令
j从
0到
i-1迭代,如果数组中位置
j的元素比位置
i的元素小,那么在位置
i可以通过计算到
j的递增子序列长度加 1 得到一个更长的递增子序列。
最后遍历
dp数组,找到一个以某一个元素结尾的最长递增子序列的长度。
int lengthOfLIS(vector<int>& nums) { int n = nums.size(); if (n == 0) return 0; vector<int> dp(n + 1, 1); dp[0] = 1; int m = 1; for (int i = 1; i < n; i ++){ for (int j = 0; j < i; j ++){ if (nums[j] < nums[i]) dp[i] = max(dp[i], dp[j] + 1); } if (dp[i] > m) m = dp[i]; } return m; }
- 点赞 1
- 收藏
- 分享
- 文章举报
相关文章推荐
- 51nod 1134 最长递增子序列 dp(经典)
- hdu1159Common Subsequence(DP最长公共递增序列)
- pta 习题集 5-5 最长连续递增子序列 (dp)
- UVa 10534 Wavio Sequence (最长递增子序列 DP 二分)
- leetcode 329. Longest Increasing Path in a Matrix 矩阵中寻找最长递增序列 + 一个典型的深度优先遍历DFS的做法
- LeetCode 最长递增子序列的O(nlogn)详解
- 51NOd 1134 最长递增子序列(dp)
- [swust 1741] 最长递增子序列问题(DP,最大流)
- dp经典之最长递增子序列长度问题
- leetcode674. 最长连续递增序列
- 51nod 1376 最长递增子序列的数量(dp、CDQ分治 | BIT)
- leetcode 300. Longest Increasing Subsequence 最长递增子序列LISS + 十分经典的动态规划DP做法
- leetcode 674. Longest Continuous Increasing Subsequence 最长递增连续子序列
- 二元组最长递增子序列 -- leetcode 354. Russian Doll Envelopes
- LeetCode 329. Longest Increasing Path in a Matrix 在二维数组中寻找最长递增序列
- 1376 最长递增子序列的数量(线段树加DP)
- hdu 1087 Super Jumping! Jumping! Jumping!(dp+最长递增序列)
- 最长递增子序列-动态规划dp-51node
- [网络流24题][codevs1906]最长递增子序列(dp+isap)
- poj 1631 Bridging signals (LIS 最长递增子序列 DP-二分)