全部最大上升子序列

来源:互联网 发布:淘宝主营类目 大类目 编辑:程序博客网 时间:2024/05/20 10:56
#全部最大上升子序列
#思路:fir保存前lis前n个数的最长子序列,sec保存前n个数的第二长子序列,则下一次的最长子序列是上一次fir加上lis[i]
def maxup(lis):    cur=1    fir=[[lis[0]]]    sec=[[]]    n=len(lis)    while cur<n:        fir_tmp=[]        sec_tmp=[]        tir_tmp=[]        for i in fir:            if i[len(i)-1]<=lis[cur]:                s=i[0:]                s.append(lis[cur])                fir_tmp.append(s)            sec_tmp.append(i)        for i in sec:            if  len(i)==0 or i[len(i)-1]<=lis[cur]:                t=i[0:]                t.append(lis[cur])                sec_tmp.append(t)            tir_tmp.append(i)        if fir_tmp:            # print("fir_tmp has element")            fir=fir_tmp            sec=sec_tmp            # print("fir for:", fir, "sec:", sec)        else:            # print("fir_tmp no element")            fir=sec_tmp            sec=tir_tmp            # print("fir for:", fir, "sec:", sec)        cur+=1    return fir
#测试:
lis="""2 1 4 3 6 5 8 7 10 9 12 11 14 13 16 15 18 17 20 19 22 21 24 23 26 25 28 27 30 29 32 31 34 33 36 35 38 37 40 39 42 41 44 43 46 45 48 47 50 49 52 51 54 53 56 55 58 57 60 59 62 61 64 63 66 65 68 67 70 69 72 71 74 73 76 75 78 77 80 79 82 81 84 83 86 85 88 87 90 89 92 91 94 93 96 95 98 97 100 99"""x=lis.split(" ")t1=time.clock()res=maxup(x)t2=time.clock()print(len(res),t2-t1)

0 0
原创粉丝点击