300. Longest Increasing Subsequence(good!)
来源:互联网 发布:gps数据用途 编辑:程序博客网 时间:2024/05/20 01:37
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?
方法一:
O(n^2)很容易
class Solution {public:int lengthOfLIS(vector<int>& nums) {if (nums.size() == 0) return 0;vector<int> lis(nums.size(), 1);int gmax = 1;for (int i = 1; i < nums.size(); i++){for (int j = 0; j < i; j++){if (nums[i]>nums[j]){lis[i] = max(lis[i], lis[j] + 1);}}if (lis[i]>gmax){gmax = lis[i];}}return gmax;}};
方法二:
O(nlgn)
举个例子,输入为[1,4,6,2,3,5]:
-读到1,将其追加到解集中;
-读到4,将其追加到解集中,解集变为[1,4];
-读到6,将其追加到解集中,解集变为[1,4,6];
-读到2,用其替换解集中的4,解集变为[1,2,6];
-读到3,用其替换解集中的6,解集变为[1,2,3];
-读到5,将其追加到解集中,解集变为[1,2,3,5],得到答案为解集长度4。
class Solution {public:int lengthOfLIS(vector<int>& nums) {vector<int> res;for (int i = 0; i < nums.size(); i++){auto iter = lower_bound(res.begin(), res.end(), nums[i]);if (iter == res.end()) res.push_back(nums[i]);else*iter = nums[i];}return res.size();}};
0 0
- 300. Longest Increasing Subsequence(good!)
- 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
- JavaScriptCore 使用
- cscope和ctags添加头文件的索引,查看系统库函数
- 虚拟现实-VR-UE4-编译源代码后,无法运行
- Radious协议
- Linux中fork()函数详解
- 300. Longest Increasing Subsequence(good!)
- IT项目经理如何学习
- 句子逆序
- ios支付宝流程
- Android AVD 创建设置中参数详解
- 停更
- 【BZOJ3631】[JLOI2014]松鼠的新家
- 数组的遍历方法
- Java初学者项目考核–小说管理系统