Đề bài
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ụ
Đầ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.
Đầ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.