2016-06-01 7 views

Antwort

1

Sicher. Definieren:

F (n) = längste aufsteigende Teilfolge der Folge 1..n , und die Sequenz muss endet mit dem Element n

Dann erhalten wir, dass Rekursion Funktion (von oben nach unten):

F (n) = max (len (F (i)) + 1), 0 = i < < n und array [i] < array [n]

So ist die Antwort:

Longest zunehmende Folge von F (1..n)

Mit memoization kommen wir zu diesem Code (Das ist Python, es als Pseudo-Code ist besser):

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

es falsch ist, glaube ich. Versuchen Sie 'array = [1, 5, 2, 3, 4, 7, 2]'. – TheRandomGuy

+0

@Dhruv Sorry für das ... sehe meine Bearbeitung ... – Sayakiss

+0

@Dhruv Gibt es noch eine Frage zu meiner Antwort? Bitte zögern Sie nicht, hier einen Kommentar zu hinterlassen, um mich zu fragen. – Sayakiss