Lấy k phần tử nhỏ nhất bằng heapq
Câu hỏi "cho tôi k giá trị nhỏ nhất" xuất hiện khắp nơi: điểm thấp nhất của lớp, tin
Tiến độ của tôi ở bài này
Điểm và code bạn nộp đượ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: python-basics, python-lists, python-functions.
Nội dung đề bài
Mô tả bài toán
Câu hỏi "cho tôi k giá trị nhỏ nhất" xuất hiện khắp nơi: điểm thấp nhất của lớp, tin nhắn mới nhất, ứng viên gần nhất khi tìm kiếm. Sắp xếp toàn bộ danh sách rồi cắt lấy k phần tử là cách dễ nghĩ nhất, nhưng khi danh sách dài thì hàng đợi ưu tiên của heapq làm việc đó gọn hơn nhiều.
Yêu cầu
Viết hàm k_smallest(items, k) trả về danh sách gồm k giá trị nhỏ nhất của items, sắp theo thứ tự không giảm. Nếu k nhỏ hơn hoặc bằng 0 thì trả về danh sách rỗng. Nếu k lớn hơn hoặc bằng số phần tử thì trả về toàn bộ danh sách đã sắp xếp tăng dần.
Quy ước nộp bài
Nộp hàm k_smallest trong solution.py. Hệ thống gọi hàm trực tiếp bằng tên đối số items, k rồi so giá trị trả về; không đọc dữ liệu từ stdin và không in ra stdout.
Input
- items: danh sách số nguyên, có thể chứa giá trị trùng nhau.
- k: số phần tử cần lấy, là số nguyên có thể âm hoặc lớn hơn độ dài danh sách.
Output
Danh sách đã sắp xếp không giảm, độ dài bằng min(max(k, 0), len(items)).
Ràng buộc
- Số phần tử từ 0 đến 50; mỗi giá trị trong khoảng -1000 đến 1000.
- Giá trị trùng nhau được giữ nguyên, không gộp lại thành một phần tử.
- Cần dùng heapq (heapq.nsmallest hoặc tự đẩy vào heap rồi lấy ra), không sắp xếp
toàn bộ danh sách để cắt lấy k phần tử.
- k không hợp lệ không được gây lỗi; hãy trả về danh sách phù hợp với quy tắc trên.
Ví dụ 1
Input
k_smallest(items=[3, 1, 2], k=2)
Output
[1, 2]
Ví dụ 2
Input
k_smallest(items=[5, 4, 3, 2, 1], k=5)
Output
[1, 2, 3, 4, 5]
Giải thích
Với items = [3, 1, 2] và k = 2, hai giá trị nhỏ nhất là 1 và 2, nên hàm trả về [1, 2].
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.
