Tất cả thử thách
Dễ 0 đã giải Tỷ lệ chấp nhận 0%

Chia danh sách thành từng phần

Cắt một danh sách thành các nhóm liên tiếp có kích thước cố định, với nhóm cuối cùng ngắn hơn nếu cần.

Bạn sẽ học được gì

  • Duyệt danh sách theo bước nhảy cố định
  • Lấy các lát cắt, lát cuối có thể ngắn hơn
  • Nhóm dữ liệu để phân trang hoặc xử lý theo lô

Đề bài

Xem bản gốc (English)

Chia dữ liệu thành các đoạn có kích thước cố định là cách các chương trình phân trang kết quả, ghi cơ sở dữ liệu theo lô hoặc gửi dữ liệu theo gói.

Cho một danh sách và một kích thước đoạn, hãy cắt danh sách thành các đoạn liên tiếp gồm đúng size giá trị, theo thứ tự. Đoạn cuối cùng chứa phần còn lại và có thể ngắn hơn.

Cài đặt split_into_chunks(values, size).

Input

values: Danh sách cần chia.

size: Kích thước đoạn.

Output

Trả về danh sách các đoạn. Một danh sách rỗng thì không có đoạn nào.

Ràng buộc

0 ≤ số giá trị ≤ 10,000

1 ≤ size ≤ 10,000

Ví dụ

Ví dụ 1
Đầu vào:
size = 3
values = [1, 2, 3, 4, 5, 6, 7]

Kết quả mong đợi:
expected = [
    [1, 2, 3],
    [4, 5, 6],
    [7]
]
Đầu vào:
long long size = 3;
std::vector<long long> values = {1, 2, 3, 4, 5, 6, 7};

Kết quả mong đợi:
std::vector<std::vector<long long>> expected = {
    {1, 2, 3},
    {4, 5, 6},
    {7}
};
Đầu vào:
long size = 3;
long[] values = new long[] {1, 2, 3, 4, 5, 6, 7};

Kết quả mong đợi:
long[][] expected = new long[][] {
    new long[] {1, 2, 3},
    new long[] {4, 5, 6},
    new long[] {7}
};

Giải thích

Các nhóm có 3 phần: [1, 2, 3] và [4, 5, 6], còn số 7 còn lại tạo thành một đoạn cuối ngắn hơn.

Ví dụ 2
Đầu vào:
size = 5
values = [8, 9]

Kết quả mong đợi:
expected = [
    [8, 9]
]
Đầu vào:
long long size = 5;
std::vector<long long> values = {8, 9};

Kết quả mong đợi:
std::vector<std::vector<long long>> expected = {
    {8, 9}
};
Đầu vào:
long size = 5;
long[] values = new long[] {8, 9};

Kết quả mong đợi:
long[][] expected = new long[][] {
    new long[] {8, 9}
};

Giải thích

Kích thước lớn hơn danh sách, nên mọi thứ vừa trong một đoạn: [[8, 9]].

Hướng tiếp cận

Hãy tự thử trước, sau đó mở từng gợi ý một.

Gợi ý 1

Các vị trí bắt đầu là 0, size, 2·size, v.v.

Gợi ý 2

Từ mỗi vị trí bắt đầu, lấy lát cắt đến start + size.

Gợi ý 3

Lát cuối có thể ngắn hơn, và danh sách rỗng không tạo phần nào.

Độ phức tạp mong đợi

thời gian O(n), bộ nhớ phụ O(n)

Tham khảo

Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.

Học hỏi từ người khác

Giải pháp cộng đồng

Chưa có giải pháp nào được chia sẻ. Hãy giải thử thách này để đăng giải pháp đầu tiên.