博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求数组中最长递增子序列
阅读量:4050 次
发布时间:2019-05-25

本文共 2133 字,大约阅读时间需要 7 分钟。

#include 
#include
#include
int min(int arr[],int len);int max(int arr[], int len);void pr_arr(int arr[], int len);void pr_mostIncreaseList(int arr[], int MaxCount[], int len, int curi, int prei,int curCount);//方法一:用MaxCount[]来保存当前位置为最后结点的 最长序列数int mostIncreaseList(int arr[], int len){ int MaxCount[len]; int i, k; for (i = 0; i < len; i++) { MaxCount[i] = 1; for (k = 0; k < i; k++) { if (arr[i] > arr[k] && MaxCount[i] < MaxCount[k] + 1) MaxCount[i] = MaxCount[k] + 1; } } /*pr_arr(MaxCount, len); printf("\n"); pr_mostIncreaseList(arr, MaxCount, len, 0, -1, 1); printf("\n");*/ return max(MaxCount, len);}//方法二:MaxV[i]表示序列数为i 的各个递增子序列最大元素的最小值int mostIncreaseList2(int arr[],int len){ int MaxV[len+1]; int MaxCount[len]; int nMaxList=1; int i,k; for(i=0;i
=0;k--) { if(arr[i] > MaxV[k]) { MaxCount[i]=k+1; break; } }//如果之上的for循环查找 变成二分查找,会快点。 if(MaxCount[i] > nMaxList) { nMaxList=MaxCount[i]; MaxV[MaxCount[i]]=arr[i]; } else { if(arr[i]>MaxV[k] && arr[i] < MaxV[k+1]) { MaxV[k+1]=arr[i]; } } } printf("\n"); pr_arr(MaxV,nMaxList); printf("\n"); pr_arr(MaxCount,len); return nMaxList;}int min(int arr[],int len){ int i=0; int nMin=arr[0]; assert(len >0); for(i=1;i
arr[i]) nMin=arr[i]; } return nMin;}int max(int arr[], int len){ int i = 0, m; if (len < 1) return -1; m = arr[0]; for (i = 1; i < len; i++) if (m < arr[i]) m = arr[i]; return m;}//打印数组中的元素void pr_arr(int arr[], int len){ int i = 0; for (i = 0; i < len; i++) printf("%d ", arr[i]); printf("\n");}//打印其中一条 递增序列 测试用void pr_mostIncreaseList(int arr[], int MaxCount[], int len, int curi, int prei, int curCount){ if (curi >= len) return; if (curCount == MaxCount[curi] && curi < len) { if (prei == -1 || arr[curi] > arr[prei]) { printf("%d ", arr[curi]); prei = curi; ++curCount; } } pr_mostIncreaseList(arr, MaxCount, len, curi + 1, prei, curCount);}int main(void){ int a[] ={ -1, 1, -2, 2, 0, -3, 4, -5, 6, -7, 9 }; printf("%d \n", mostIncreaseList(a, sizeof(a) / sizeof(int))); printf("%d \n", mostIncreaseList2(a, sizeof(a) / sizeof(int))); return 0;}

转载地址:http://jicci.baihongyu.com/

你可能感兴趣的文章
小诗,纪念我即将到来的结婚两周年
查看>>
自勉文[出处不详,待考证]
查看>>
中国行政级别
查看>>
国家公务员的级别
查看>>
悼念地震死难者:使整个网页变黑白色(灰色)的特效代码
查看>>
asp.net优化完全技巧
查看>>
道 经
查看>>
德 经
查看>>
藏太甲于桐宫-从电视剧康熙王朝中学到的历史知识
查看>>
开发过程中的沟通问题
查看>>
“众”字透出的哲学
查看>>
恋爱爱情婚姻家庭与炒股票
查看>>
答非所问的古今中外名人小笑话幽默
查看>>
周易、命理、风水、姓名与命运交流周易研究心得:姓名学
查看>>
解决asp.net中tabstrip不能点击的问题
查看>>
PB中使用blob进行文件读取的性能问题
查看>>
DataWindow.net中如何实现鼠标划过时变颜色
查看>>
Datawindow.net中设置字符串的显示,超过长度部分显示为。。。
查看>>
PowerBuilder中使用带返回的powerobjectparm
查看>>
从oracle表中随机取记录,产生随机数和随机字符串
查看>>