2016-06-01 39 views

回答

1

当然。定义:

F(N)=最长递增序列1..N 的序列,序列必须元素结束ň

然后我们得到的递归功能(自上而下):

F(N)= MAX(LEN(F(I))+ 1)0 < = I < n和阵列[I] <阵列[n]的

因此,答案是:

F(1..1)

随着memoization

最长递增子,我们得出这样的代码(这是Python的,它比伪代码更好):

d = {} 
array = [1, 5, 2, 3, 4, 7, 2] 

def lis(n): 
    if d.get(n) is not None: 
     return d[n] 
    length = 1 
    ret = [array[n]] 
    for i in range(n): 
     if array[n] > array[i] and len(lis(i)) + 1 > length: 
      length = len(lis(i)) + 1 
      ret = lis(i) + [array[n]] 
    d[n] = ret 
    return ret 

def get_ans(): 
    max_length = 0 
    ans = [] 
    for i in range(len(array)): 
     if max_length < len(lis(i)): 
      ans = lis(i) 
      max_length = len(lis(i)) 
    return ans 

print get_ans() # [1, 2, 3, 4, 7] 
+0

这是不正确的,我相信。尝试'array = [1,5,2,3,4,7,2]'。 – TheRandomGuy

+0

@Dhruv对不起,...看到我的编辑... – Sayakiss

+0

@Dhruv对我的回答仍然有任何疑问吗?请不要犹豫,在这里留言来问我。 – Sayakiss