第八周:[Leetcode]300. Longest Increasing Subsequence
来源:互联网 发布:哈尔滨金蝶软件 编辑:程序博客网 时间:2024/06/01 15:33
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; int lis[nums.size()],ans = 0; for(int i = 0;i<nums.size();i++){ lis[i] = 1; for(int j = 0;j < i;j++){ if(nums[j] < nums[i]) lis[i] = lis[j] + 1 > lis[i] ? lis[j] + 1 : lis[i]; } ans = lis[i] > ans ? lis[i] : ans; } return ans;}};
第二种方法:使用二分查找不断更新对应路径值中最小的结束节点,也是按照老师上课讲的方法,O(nlogn)时间复杂度
class Solution {public: int binary_search(vector<int> a,int target){ int l = 0,r = a.size() - 1,mid; while(r - l > 1){ mid = l + ((r - l)>>1); if(target > a[mid]) l = mid; else if(target == a[mid]) return mid; else r = mid; } return l;}int lengthOfLIS(vector<int>& nums) { if(nums.size() == 0) return 0; vector<int> a; a.push_back(nums[0]); for(int i = 1;i<nums.size();i++){ if(nums[i] > a[a.size() - 1]) a.push_back(nums[i]); else if(nums[i] < a[a.size() - 1]){ int index = binary_search(a, nums[i]); if(index == 0 && nums[i] < a[0]) a[0] = nums[i]; else if(index < a.size() - 1 && a[index] != nums[i]) a[++index] = nums[i] < a[index] ? nums[i] : a[index]; } } return a.size();}};
0 0
- 第八周:[Leetcode]300. Longest Increasing Subsequence
- 第七周:[leetcode] 300. Longest Increasing Subsequence
- Leetcode-300.Longest Increasing Subsequence
- 300. Longest Increasing Subsequence LeetCode
- [leetcode] 300. Longest Increasing Subsequence
- leetcode 300. Longest Increasing Subsequence
- LeetCode *** 300. Longest Increasing Subsequence
- LeetCode 300. Longest Increasing Subsequence
- LeetCode-300.Longest Increasing Subsequence
- [leetcode] 300. Longest Increasing Subsequence
- leetcode 300. Longest Increasing Subsequence
- LeetCode 300. Longest Increasing Subsequence
- leetcode 300. Longest Increasing Subsequence
- [LeetCode]--300. Longest Increasing Subsequence
- [leetcode] 300. Longest Increasing Subsequence
- LeetCode 300. Longest Increasing Subsequence
- 【LeetCode】300. Longest Increasing Subsequence
- 【LeetCode】300. Longest Increasing Subsequence
- 解决ubuntu14.04 samba服务出错
- 另一种思路比较2个日期是否相等的方式
- ubuntu 安装samba
- EditText焦点的转换
- Django中实现分页
- 第八周:[Leetcode]300. Longest Increasing Subsequence
- 在winform中使用三层架构学习总结
- Android系统移植与调试之------->build.prop文件详细赏析
- android学习(十九) 使用无线连接设备(三) 通过P2P搜索网络服务
- 2017.4.15考试
- poj 2481 Cows
- [C++] 代码C风格缩进
- NYOJ--488--dfs--素数环
- 配置服务器 —— 安装Nginx