2677. 分块数组

简介: 2677. 分块数组

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

给定一个数组 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 <= 105
  • 1 <= size <= arr.length + 1

解题思路

先计算出数组需要被分成多少块,然后创建一个长度为块数的空数组 res,并使用 Array.from() 方法将其转换为由空数组组成的新数组。接着,遍历原数组 arr 中的每个元素,并将其插入到 res 数组中对应的子数组中。具体来说,这里使用了 forEach() 方法和箭头函数,以及 Math.floor() 和 / 运算符来确定元素所属的块。

最后返回由子数组组成的新数组,即为按照指定大小分块后的结果。

例如,如果调用 chunk([1, 2, 3, 4, 5], 2),则返回一个新数组 [[1, 2], [3, 4], [5]],表示原数组 [1, 2, 3, 4, 5] 被分成了三个大小为2的子数组。

AC代码

/**
 * @param {Array} arr
 * @param {number} size
 * @return {Array}
 */
var chunk = function (arr, size) {
  const len = Math.ceil(arr.length / size);
  const res = Array.from({ length: len }, () => []);
  arr.forEach((item, index) => {
    res[Math.floor(index / size)].push(item);
  });
  return res;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
算法 容器
算法:双指针解决数组划分和数组分块问题
算法:双指针解决数组划分和数组分块问题
php数组随机排序
PHP中对数据进行随机排序
|
6月前
|
存储
2215.找出两数组的不同
2215.找出两数组的不同
43 0
二维数组的压缩存储,稀疏数组
在二维数组只有少部分有效数据的时候,为了不存储过多的无效数据,我们可以使用稀疏数组来存储二维数组。
|
Serverless
练习>>合并两个字符串(放入其中一个数组)
练习>>合并两个字符串(放入其中一个数组)
91 0
|
算法
【算法】数组合并去重算法
【算法】数组合并去重算法
104 0
|
Java 定位技术
减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现
减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现
120 1
减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现
集合的查、并运算,即简化版运算方法,按秩归并,压缩路径
集合的查、并运算,即简化版运算方法,按秩归并,压缩路径
|
算法
算法练习——(3)合并数组
有两个已经排好序的数组,A:{9,28,38,40,56,65,78,82} B:{13,21,33,38,45},请定义一个新数组,将这两个数组中的数据合并到新数组中并且保证数据仍然是有序的。
|
缓存 移动开发 算法
数据结构和算法-原始数组转稀疏数组(二)|学习笔记
快速学习数据结构和算法-原始数组转稀疏数组(二)
数据结构和算法-原始数组转稀疏数组(二)|学习笔记