Giả sử chúng ta có một danh sách các số nguyên chưa được sắp xếp. Chúng ta phải tìm dãy con tăng dài nhất. Vì vậy, nếu đầu vào là [10,9,2,5,3,7,101,18], thì đầu ra sẽ là 4, vì dãy con tăng dần là [2,3,7.101]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
- đường mòn:=một mảng có độ dài từ 0 đến độ dài là num - 1 và điền vào mảng này bằng 0
- kích thước:=0
- cho x trong nums
- i:=0, j:=size
- trong khi tôi không phải j
- giữa:=i + (j - i) / 2
- nếu trails [mid]
- đường mòn [i]:=x
- size:=tối đa là i + 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 lengthOfLIS(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) #print(tails) return size ob1 = Solution() print(ob1.lengthOfLIS([10,9,2,5,3,7,101,18]))
Đầu vào
[10,9,2,5,3,7,101,18]
Đầu ra
4