Dãy con tăng dài nhất trong O(N log N)
Hệ thống đánh giá hiệu năng huấn luyện mô hình tại AI Empire Academy ghi lại chỉ số Accuracy qua các epoch thành một mảng số thực/số nguyên nums. Cần tìm độ dài lớn nhất của một ch…
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: bisect module, binary search, dp concept.
Nội dung đề bài
Mục tiêu kiến thức
- Hiểu hạn chế của giải thuật Quy hoạch động LIS kinh điển O(N2) khi dữ liệu lớn.
- Nắm vững thuật toán Xếp bài kiên nhẫn (Patience Sorting) kết hợp Tìm kiếm nhị phân
bisect_left. - Đạt độ phức tạp thời gian O(N log N) để vượt qua giới hạn N = 105 phần tử trong 1.0 giây.
Mô tả bài toán
Hệ thống đánh giá hiệu năng huấn luyện mô hình tại AI Empire Academy ghi lại chỉ số Accuracy qua các epoch thành một mảng số thực/số nguyên nums. Cần tìm độ dài lớn nhất của một chuỗi các epoch có hiệu năng tăng trưởng nghiêm ngặt liên tục (dãy con không nhất thiết phải liền kề).
Hãy viết hàm length_of_lis(nums: list[int]) -> int trả về độ dài của dãy con tăng nghiêm ngặt dài nhất (Longest Increasing Subsequence - LIS).
Quy tắc thuật toán Patience Sorting:
- Duy trì mảng
tailsvớitails[i]là phần tử nhỏ nhất kết thúc một dãy con tăng độ dài i + 1. - Mảng
tailsluôn được duy trì tăng dần nghiêm ngặt. - Với mỗi phần tử x trong
nums: - Dùng tìm kiếm nhị phân (
bisect_left) tìm vị trí idx đầu tiên trongtailssao chotails[idx] >= x. - Nếu tìm thấy, ghi đè
tails[idx] = x. - Nếu không tìm thấy (tức x > mọi phần tử trong
tails), mở rộng mảngtails.append(x). - Độ dài LIS chính là
len(tails).
Input
Danh sách các số nguyên nums.
Output
Số nguyên int là độ dài của dãy con tăng dài nhất.
Ràng buộc
- 0 ≤ len(nums) ≤ 105.
- -109 ≤ nums[i] ≤ 109.
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
Ví dụ 1
Input
`nums = [10, 9, 2, 5, 3, 7, 101, 18]`Output
`4`Giải thích
Dãy con tăng dài nhất là [2, 3, 7, 101] (hoặc [2, 5, 7, 101]), có độ dài bằng 4.
Ví dụ 2
Input
`nums = [0, 1, 0, 3, 2, 3]`Output
`4`Giải thích
Dãy con tăng dài nhất là [0, 1, 2, 3], độ dài bằng 4.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
