python-260Đọc toàn bộ đề miễn phí

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

PythonCơ bản10 phút

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ủ đề

data-structuresheappriority-queuesortingentry-ramp

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].

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

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.

Nhóm Zalo