最长递增子序列
来源:互联网 发布:listview的优化 编辑:程序博客网 时间:2024/06/05 03:08
使用动态规划
dp数组里面每个元素对应一个当前能取得的最大的递增子序列的值。从头开始遍历,每到一个元素,就往前找,满足一下两个条件的:
- 比当前元素小
- dp值最大的那个
则当前元素的dp值等于之前元素比他小但是dp值最大再加上1.
只是找出长度的话,只需要遍历dp数组找到最大值就好了,但是如果要是找出序列,必须从后往前,dp值一次减小,对应的序列才是最终输出。
int findLongest(vector<int> A, int n) { size_t t = A.size(); vector<int> dp(t,1); for (int i = 1; i < t;i++) { int min = i; int dpmax = 0; for (int j = i - 1; j >= 0;j--) { if (A[i]>A[j] && dpmax<dp[j]) { dpmax = dp[j]; } } dp[i] = dpmax + 1; } / *******只是找出长度******* / / *sort(dp.begin(), dp.end()); auto it = dp.end() - 1; return *it;* / auto it = max_element(dp.begin(), dp.end());// return *it; / *******只是找出长度******* / / *******找出子序列******* / int curdp = *it; deque<int> q; for (int i = n - 1; i >= 0 && curdp>=1; i--) { if (dp[i]==curdp) { q.push_front(A[i]); curdp--; } } for (int s:q) { cout << s << " "; } / *******找出子序列******* / return 0;}
阅读全文
0 0
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- numpy入门——数据的创建
- [DeCAF]DeCAF: A Deep Convolutional Activation Featurefor Generic Visual Recognition
- 职业规划之交流指导
- Bitmap转成byte[]再用base64转成string
- docker入门
- 最长递增子序列
- Irrlicht 源码学习笔记 开篇
- laravel如何获取当前url的别名
- apue读书笔记-Ch04(2)
- MC/ServiceGuard HP
- 设计模式11-装饰模式
- webstorm快捷键大全
- 剑指Offer_面试题29_数组中出现次数超过一半的数字
- MFC中使用控制台窗口打印调试信息