300.leetcode-Longest Incresing Subsequence最长递增子序列
来源:互联网 发布:网络应用安全包括 编辑:程序博客网 时间:2024/06/02 02:25
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?
方法一:采用动态规划的思想,定义一个一维数组dp[i],表示以nums[i]结尾的最长递增子序列。遍历nums[i]之前的数,如果发现某个数小于nums[i],则更新dp[i], dp[i]=max(dp[i], dp[j]+1).返回dp数组的最大值。时间复杂度为O(n2).
class Solution {public: int lengthOfLIS(vector<int>& nums) { int n = nums.size();if (n == 0)return 0;vector<int>dp(n, 1);int maxval=1;for (int i = 1; i<n; ++i){for (int j = i - 1; j >= 0; --j){if (nums[j] < nums[i])dp[i] = max(dp[i], dp[j] + 1);}if(dp[i]>maxval)maxval=dp[i];}return maxval; }};方法二:时间复杂度为O(nlogn).利用二分查找的思想。建立一个一维数组dp[i],开始遍历原数组,对每一个元素,用二分查找法找到第一个不小于它的的数字,如果这个数字不存在,则直接在后面添加该元素,如果存在,则将这个数字替换为当前遍历到的元素,最后返回dp的元素个数。注意:dp数组可能并不是一个真实的LIS.
int lengthOfLIS(vector<int>& nums) { vector<int> res; for(int i=0; i<nums.size(); i++) { auto it = std::lower_bound(res.begin(), res.end(), nums[i]); if(it==res.end()) res.push_back(nums[i]); else *it = nums[i]; } return res.size();}
0 0
- 300.leetcode-Longest Incresing Subsequence最长递增子序列
- 最长递增子序列 Longest Incresing Subsequence
- LeetCode 300. Longest Increasing Subsequence(最长递增子序列)
- 【LeetCode】300.Longest Increasing Subsequence最长递增子序列LIS
- leetcode 300. Longest Increasing Subsequence 最长递增子序列LISS
- leetcode Longest Increasing Subsequence 最长递增子序列
- [LeetCode] Longest Increasing Subsequence 最长递增子序列的长度
- 【LeetCode 300 Longest Increasing Subsequence】最长递增子序列
- LeetCode--Longest Increasing Subsequence (最长递增子序列)Python
- 最长递增子序列 (Longest Increasing Subsequence)
- 最长递增子序列(Longest Increase Subsequence)
- 最长递增子序列 (Longest Increasing Subsequence)
- 最长递增子序列 (Longest Increasing Subsequence)
- 最长递增子序列 (Longest Increasing Subsequence)
- Longest increasing subsequence,最长递增子序列
- 最长递增子序列 (Longest Increasing Subsequence)
- 最长递增子序列-Longest Increasing Subsequence
- 最长递增子序列 (Longest Increasing Subsequence)
- QT5.2中文乱码解决问题
- 迷宫城堡 【求SCC 个数】
- (13.1.2)PMBOK之二:五大过程组及其涉及的输入、输出、工具技术
- web.py的ctx(context)
- 文章标题
- 300.leetcode-Longest Incresing Subsequence最长递增子序列
- IT项目经理应该做什么
- 指针数组和二级指针的排序应用实例
- AngularJS快速入门5--过滤器
- 汇编
- LeetCode代码记录
- 利用JSch远程登录linux服务器执行指令
- 车牌识别-模板匹配-BP神经网络-卷积神经网络[深度学习]
- 欢迎使用CSDN-markdown编辑器