Giả sử chúng ta có một danh sách các số. Chúng ta phải tìm độ dài của dãy con dài nhất tăng dần. Vì vậy, nếu đầu vào là [6, 1, 7, 2, 8, 3, 4, 5], thì đầu ra sẽ là 5, vì dãy con tăng dài nhất là [2,3,4,5,6].
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Tạo một mảng có tên là đuôi có kích thước bằng nums và điền vào mảng này bằng 0.
-
kích thước:=0
-
cho mỗi phần tử x trong mảng nums -
-
i:=0, j:=size
-
trong khi tôi không giống với j, thì
-
giữa:=i + (j - i) / 2
-
nếu tails [mid]
-
-
đuôi [i]:=x
-
kích thước:=max ofi + 1 và kích thước
-
-
kích thước trả lại.
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class Solution(object): def solve(self, nums): tails =[0 for i in range(len(nums))] size = 0 for x in nums: i=0 j=size while i!=j: mid = i + (j-i)//2 if tails[mid]> x: i= mid+1 else: j = mid tails[i] = x size = max(i+1,size) return size ob = Solution() nums = [7, 2, 8, 3, 9, 4, 5, 6] print(ob.solve(nums))
Đầu vào
[7, 2, 8, 3, 9, 4, 5, 6]
Đầu ra
5