2016-06-01 37 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