2677. 分块数组

发布时间:2024年01月21日

说在前面

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

题目描述

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

文章来源:https://blog.csdn.net/Twinkle_sone/article/details/135585291
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。