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:
arris a valid JSON array2 <= JSON.stringify(arr).length <= 10^51 <= 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^51 <= 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;
};
