2677. 分块数组
2677. 分块数组
题目
Given an array arr
and a chunk size size
, return a chunked array.
A chunked array contains the original elements in arr
, but consists of subarrays each of length size
. The length of the last subarray may be less than size
if arr.length
is not evenly divisible by size
.
You may assume the array is the output of JSON.parse
. In other words, it is valid JSON.
Please solve it without using lodash's _.chunk
function.
Example 1:
Input: arr = [1,2,3,4,5], size = 1
Output: [[1],[2],[3],[4],[5]]
Explanation: The arr has been split into subarrays each with 1 element.
Example 2:
Input: arr = [1,9,6,3,2], size = 3
Output: [[1,9,6],[3,2]]
Explanation: The arr has been split into subarrays with 3 elements. However, only two elements are left for the 2nd subarray.
Example 3:
Input: arr = [8,5,3,2,6], size = 6
Output: [[8,5,3,2,6]]
Explanation: Size is greater than arr.length thus all elements are in the first subarray.
Example 4:
Input: arr = [], size = 1
Output: []
Explanation: There are no elements to be chunked so an empty array is returned.
Constraints:
arr
is a valid JSON array2 <= JSON.stringify(arr).length <= 10^5
1 <= size <= arr.length + 1
题目大意
给定一个数组 arr
和一个块大小 size
,返回一个 分块 的数组。
分块 的数组包含了 arr
中的原始元素,但是每个子数组的长度都是 size
。如果 arr.length
不能被 size
整除,那么最后一个子数组的长度可能小于 size
。
你可以假设该数组是 JSON.parse
的输出结果。换句话说,它是有效的 JSON。
请你在不使用 lodash 的函数 _.chunk
的情况下解决这个问题。
示例 1:
输入: arr = [1,2,3,4,5], size = 1
输出:[[1],[2],[3],[4],[5]]
解释: 数组 arr 被分割成了每个只有一个元素的子数组。
示例 2:
输入: arr = [1,9,6,3,2], size = 3
输出:[[1,9,6],[3,2]]
解释: 数组 arr 被分割成了每个有三个元素的子数组。然而,第二个子数组只有两个元素。
示例 3:
输入: arr = [8,5,3,2,6], size = 6
输出:[[8,5,3,2,6]]
**解释:**size 大于 arr.length ,因此所有元素都在第一个子数组中。
示例 4:
输入: arr = [], size = 1
输出:[]
解释: 没有元素需要分块,因此返回一个空数组。
提示:
arr
是一个有效的 JSON 数组2 <= JSON.stringify(arr).length <= 10^5
1 <= size <= arr.length + 1
解题思路
- 遍历数组:使用
for
循环迭代数组arr
,每次递增size
。 - 分割逻辑:每次取出
size
个元素,arr.slice(i, i + size)
,形成一个新的子数组,然后将其添加到结果数组中。 - 处理剩余元素:如果数组的长度不是
size
的倍数,最后的子数组可能会有少于size
个元素。 - 返回结果:最终返回包含所有子数组的数组。
复杂度分析
- 时间复杂度:
O(n)
,其中n
是数组arr
的长度,需要遍历整个数组一次。 - 空间复杂度:
O(n)
,最坏情况下,结果数组的大小会与输入数组相同。
代码
/**
* @param {Array} arr
* @param {number} size
* @return {Array}
*/
var chunk = function (arr, size) {
let res = [];
for (let i = 0; i < arr.length; i += size) {
res.push(arr.slice(i, i + size));
}
return res;
};