NO——47:最长递增子序列
来源:互联网 发布:新难兄难弟知乎 编辑:程序博客网 时间:2024/05/18 01:27
题目:
求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
2.参考博客:
http://www.cnblogs.com/whyandinside/archive/2012/09/15/2686498.html
前三种方法我都没有看懂。。。。
最后我采用的是第4种。
代码如下:
def getmaxsameli(li1,li2): len1=len(li1) len2=len(li2) maxtrix=[ [(0,(0,0))]*(len2+1) for row in xrange(len1+1)] maxtrix[0]=[ (0,(0,-1)) for col in xrange(len2+1)] for row in xrange(len1+1): maxtrix[row][0]=(0,(-1,0)) for i,value1 in enumerate(li1): for j ,value2 in enumerate(li2): if li1[i]==li2[j]: maxtrix[i+1][j+1]=(maxtrix[i][j][0]+1,(-1,-1)) else: maxtrix[i+1][j+1]=maxtrix[i][j+1][0],(-1,0) if maxtrix[i+1][j][0]>maxtrix[i+1][j+1][0]: maxtrix[i+1][j+1]=maxtrix[i+1][j][0],(0,-1) for row in xrange(len1): for col in xrange(len2): print "(%s,%s),%s"%(li1[row],li2[col],maxtrix[row+1][col+1]), print row,col=len1,len2 re_list=[] while row>0 and col>0: tmp_num,tmp_dir=maxtrix[row][col] if tmp_dir==(-1,-1): if not re_list: re_list.append(li2[col-1]) else: re_list.insert(0,li2[col-1]) row,col=row+tmp_dir[0],col+tmp_dir[1] return re_listif __name__=="__main__": souce_li=[9 ,8, 2, 1,12,11,10,100, 7, 5, 3, 4, 3, 2, 1] sorted_li=list(set(souce_li)) sorted_li=sorted(sorted_li,reverse=True) #sorted_li=list() print getmaxsameli(souce_li,sorted_li)动态规划,还是不熟啊。。以后有时间专门抽个时间来做次动态的习题吧。
0 0
- NO——47:最长递增子序列
- 最长递增子序列 [No. 39]
- 算法——最长递增子序列
- 算法导论—最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- 最长递增子序列
- HMM学习最佳范例五:前向算法2
- typedef的用法总结
- 土豪金版小米3曝光
- lodop配合easyui
- 类加载器(一)
- NO——47:最长递增子序列
- PHP中读取文件的几个方法
- HMM学习最佳范例五:前向算法3
- HMM学习最佳范例五:前向算法4
- oracle 11g的awr报告生成
- HMM学习最佳范例五:前向算法5
- CHIPSCOPE原理
- 全球首例机器人自杀事件 因受够无聊家务
- HMM学习最佳范例六:维特比算法1