算法第八周Longest Increasing Subsequence[medium]
来源:互联网 发布:小金鱼摔炮淘宝 编辑:程序博客网 时间:2024/05/17 15:02
Longest Increasing Subsequence[medium]
Description
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?
Solution
具体分析见上一篇博客关于LIS问题的分析;
O(n*n)
int lengthOfLIS(vector<int>& nums) { int l = nums.size(); if (l == 0) return l; int f[l]; f[0] = 1; for (int i = 1; i < l; i++) { f[i] = 1; for (int j = 0; j < i; j++) { if (nums[j] < nums[i]&&f[i] < f[j]+1) { f[i] = f[j] + 1; } } } int max = f[0]; for (int i = 1; i < l; i++) { if (f[i] > max) { max = f[i]; } } return max; }
O(n*logn)
int lengthOfLIS(vector<int>& nums) { int l = nums.size(); if (l == 0) return l; int B[l]; B[0] = nums[0]; int len = 1; int pos = 0; for (int i = 1; i < l; i++) { if (nums[i] > B[len-1]) { B[len] = nums[i]; len++; } else { pos = biSearch(B, len, nums[i]); B[pos] = nums[i]; } } return len; } int biSearch(int B[], int length, int ob) { int l = 0; int r = length-1; int mid; while (l <= r) { mid = l + (r-l)/2; if (B[mid] > ob) { r = mid-1; } else if(B[mid] < ob) { l = mid+1; } else { return mid; } } return l; }
阅读全文
0 0
- 算法第八周Longest Increasing Subsequence[medium]
- 算法第八周Number of Longest Increasing Subsequence[medium]
- Longest Increasing Subsequence (Medium)
- 算法分析与设计第八周:300. Longest Increasing Subsequence
- 300. Longest Increasing Subsequence -Medium
- 第八周:[Leetcode]300. Longest Increasing Subsequence
- 【算法】Longest Increasing Subsequence
- Leetcode 300. Longest Increasing Subsequence (Medium) (cpp)
- 300. Longest Increasing Subsequence (Medium)
- 673[Medium]: Number of Longest Increasing Subsequence
- 300.LeetCode Longest Increasing Subsequence(medium)[动态规划]
- 300. Longest Increasing Subsequence 类别:动态规划 难度:medium
- 673. Number of Longest Increasing Subsequence【Medium】 一维动归
- 算法系列——Longest Increasing Subsequence
- BP算法经典例题 longest increasing subsequence
- 第七周:[leetcode] 300. Longest Increasing Subsequence
- 第13周 Longest Continuous Increasing Subsequence
- Longest Increasing Subsequence
- N!
- SSH高度整合--开源代码
- c语言 各类数据类型的取值范围 (含图,详细)
- Http状态码
- JZOJ. 5421【NOIP2017提高A组集训10.25】嘟嘟噜
- 算法第八周Longest Increasing Subsequence[medium]
- Android XRcyclerView刷新,加载更多
- 简单的c
- Websphere服务器下Jsp页面加载报:JSPG0123E,找不到标记属性xxx的标记属性信息解决办法
- 图形用户界面
- python 出现unicode错误解决
- Scala(三)
- 大数据之hive安装
- 瑶瑶的第K大 ACdream-1099