算法 求一个数组的最长递减子序列 C
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
//****************************************************************************************************//// 求一个数组的最长递减子序列 - C++ - by Chimomo//// 题目: 求一个数组的最长递减子序列,比如{8, 14, 6, 2, 8, 14, 3, 2, 7, 4, 7, 2, 8, 101, 23, 6, 1, 2, 1, 1}的最长递减子序列为{14,8,3,2,1}。//// Answer: Scan from left to right, maintain a decreasing sequence. For each number, binary search in the decreasing sequence to see whether it can be substituted.////****************************************************************************************************#include <iostream>#include <cassert>#include <stack>using namespace std ;int BinarySearch(int *A, int nTarget, int nLen);// Find the longest decreasing sequence in array A of length nLen.void FindLongestDecreasingSequence(int *A, int nLen){ int *index = new int[nLen]; int *LDS = new int[nLen]; index[0] = A[0]; LDS[0] = 1; int indexLen = 1; for (int i = 1; i < nLen; i++) { int pos = BinarySearch(index, A[i], indexLen); index[pos] = A[i]; LDS[i] = pos + 1; if(pos >= indexLen) { indexLen++; } } int ResultLen = indexLen; for (int i = nLen; i >= 0; i--) { if(LDS[i] == ResultLen) { index[ResultLen - 1] = A[i]; ResultLen--; } } for (int i = 0; i < indexLen; i++) { cout << index[i] << " "; } delete [] index;}// Binary search nTarget in array A of length nLen.int BinarySearch(int *A, int nTarget, int nLen){ assert(A != NULL && nLen > 0); int start = 0; int end = nLen - 1; while (start <= end) { int mid = (start + end) / 2; if(nTarget > A[mid]) { end=mid-1; } else if(nTarget<A[mid]) { start=mid+1; } else { return mid; } } return start;}int main(){ int A[] = {8, 14, 6, 2, 8, 14, 3, 2, 7, 4, 7, 2, 8, 101, 23, 6, 1, 2, 1, 1}; int nLen = sizeof(A) / sizeof(int); FindLongestDecreasingSequence(A, nLen); return 0;}// Output:/*14 8 7 6 2 1*/
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
算法 求一个数组的最长递减子序列 C相关推荐
- 算法 - 求一个数组的最长递减子序列(C++)
分享一个大牛的人工智能教程.零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net /** 求一个数组的最长递减子序列 - C++ - ...
- 数组的最长递减子序列java_求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}...
问题描述:给出一个数列,找出其中最长的单调递减(或递增)子序列. 解题思路: 动态规划.假设0到i-1这段数列的最长递减序列的长度为s,且这些序列们的末尾值中的最大值是t.对于a[i]有一下情况: ( ...
- 求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}...
目前想到的一个方法,就是用栈来寻找,说下思想:(栈中的data为元素所在的位置,这意味着出栈和进栈的都是索引值,所以比较的时候根据索引找到其值后比较) (1)栈为空,把一个元素入栈.9 (2)把小于栈 ...
- 数组的最长递减子序列java_最长递增/递减子序列
<编程之美>里有个题目是要求数组中最长递增子序列,在CSDN上看到的题目是数组中的最长递减子序列.题目如下: 求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子 ...
- c语言找出递增子数组的长度,求给定数组的最长递增子序列(记录子序列的值)...
#include using namespace std; const int maxn = 100; int arr[maxn], dp[maxn], pre[maxn]; // pre记录前一个的 ...
- java 最大子数组_求一个数组中子数组的最大和算法(Java实现)
前几天在微信订阅号"待字闺中"中看到的一篇文章<小技巧求一个数组中子数组的最大和>,提供下Java的实现,并且在对题目做下小修改,本来打算直接在微信里直接回复,但是发现 ...
- 【算法题】求一个字符串的最长不重复子串
[题目描述] 求一个字符串的最长不重复子串.比如:给定"abcabcbb"的答案是"abc",长度是3:给定"bbbbb"的答案是" ...
- 算法12--topK求一个数组中第k大的数
求一个数组中第k大的值 解法一: 建立一个k个元素的最大堆,首先将数组中前k个元素放入堆中,此时堆顶元素为第k大的元素,后面继续遍历数组,比较堆顶元素与数组中元素值,当数组中元素小于堆顶元素时,将堆顶 ...
- 求数组中最长递增子序列的长度
题目:写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中最长递增子序列的长度. 例:在序列[1, -1, 2, -3, 4, -5, 6, -7]中,其最长递增子序列的长度为4([1, 2, ...
最新文章
- gtest使用初级指南
- 大数据时代,如何构建精准用户画像,直击精细化运营
- 关于算法的时间复杂度和空间复杂度的总结
- 《系统集成项目管理工程师》必背100个知识点-60干系人管理
- 自定义JAVA注解_深入理解Java:自定义java注解
- Android面试收集录 2D绘图与动画技术
- 南方周末:阿里巴巴的大数据梦
- 【java笔记】数组概念初始化及相关操作
- Codeforces 781B. Innokenty and a Football League
- html5获取手机屏幕大小写,html图片自适应手机屏幕大小的css写法
- 基于cat12和SPM12进行大脑VBM数据分析笔记2——统计分析
- linux mmap 作用,LINUX 中的mmap浅析
- 高精度定位系统融合定位模式崭露头角
- java生成树形Excel_java poi导出树形结构到excel文件
- [BJWC2008]雷涛的小猫 dp
- 一位苦逼程序员的找工作经历
- Android远程弹窗,Remote Desktop(远程桌面)Android平台远程电脑的又一神器!
- CodeForces PYM101158CSU2294 Hidden Anagrams 26进制 前缀和
- 怎么用python写数据库_Python实现数据库编程方法详解
- uniapp 解决ios上拉下拉白边处理