将一维数组转变成二维数组

简介: 将一维数组转变成二维数组

说在前面

🎈 算法并不一定都是很难的题目,也有很多只是一些代码技巧,多进行一些算法题目的练习,可以帮助我们开阔解题思路,提升我们的逻辑思维能力,也可以将一些算法思维结合到业务代码的编写思考中。简而言之,平时进行的算法习题练习带给我们的好处一定是不少的,所以让我们一起来养成算法练习的习惯。今天练习的题目是一道比较简单的题目 ->将一维数组转变成二维数组

问题描述

给你一个下标从 0 开始的一维整数数组 original 和两个整数 mn 。你需要使用 original所有 元素创建一个 mn 列的二维数组。

original 中下标从 0n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。

请你根据上述过程返回一个 **m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。

示例 1:

输入: original = [1,2,3,4], m = 2, n = 2
输出: [[1,2],[3,4]]
解释: 构造出的二维数组应该包含 2 行 2 列。
original 中第一个 n=2 的部分为 [1,2] ,构成二维数组的第一行。
original 中第二个 n=2 的部分为 [3,4] ,构成二维数组的第二行。

示例 2:

输入: original = [1,2,3], m = 1, n = 3
输出: [[1,2,3]]
解释:
构造出的二维数组应该包含 1 行 3 列。
将 original 中所有三个元素放入第一行中,构成要求的二维数组。

示例 3:

输入: original = [1,2], m = 1, n = 1
输出: []
解释: original 中有 2 个元素。
无法将 2 个元素放入到一个 1x1 的二维数组中,所以返回一个空的二维数组。

示例 4:

输入: original = [3], m = 1, n = 2
输出: []
解释:
original 中只有 1 个元素。
无法将 1 个元素放满一个 1x2 的二维数组,所以返回一个空的二维数组。

提示:

  • 1 <= original.length <= 5 * 10^4
  • 1 <= original[i] <= 10^5
  • 1 <= m, n <= 4 * 10^4

思路分析

首先我们应该要先理解一下题目意思,题目会给我们一个一维数组original,和两个整数 mn,我们需要使用 original所有 元素创建一个 mn 列的二维数组。第一行包含original中下标0 ~ nn 个元素,第二行包含original中下标n ~ 2 * nn 个元素,第 i 行包含original中下标(i - 1) * n ~ i * nn 个元素……相当于我们要对一维数组进行切割,每n个元素切割为一整块作为一行。

我们需要先判断给定数组能否刚好创建一个 mn 列的二维数组,如果不能,我们直接返回一个空数组。

if (m * n !== original.length) return [];

生成一个 mn 列的二维数组,将一维数组中的元素填写到二维数组中对应的位置上,二维数组中第 ij 列的元素应该对应一维数组中第 i * n + j个元素。

const res = new Array(m);
for (let i = 0; i < m; i++) {
  res[i] = new Array(n);
  for (let j = 0; j < n; j++) {
    res[i][j] = original[i * n + j];
  }
}

AC 代码

完整 AC 代码如下:

/**
 * @param {number[]} original
 * @param {number} m
 * @param {number} n
 * @return {number[][]}
 */
var construct2DArray = function (original, m, n) {
  if (m * n !== original.length) return [];
  const res = new Array(m);
  for (let i = 0; i < m; i++) {
    res[i] = new Array(n);
    for (let j = 0; j < n; j++) {
      res[i][j] = original[i * n + j];
    }
  }
  return res;
};

公众号

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

说在后面

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

目录
相关文章
|
8月前
leetcode-2022:将一维数组转变成二维数组
leetcode-2022:将一维数组转变成二维数组
50 1
【一维数组和二维数组】
【一维数组和二维数组】
63 0
|
8月前
|
存储 算法 C++
C++013-C++二维数组
C++013-C++二维数组
C++013-C++二维数组
|
8月前
|
JavaScript 前端开发 索引
如何对实现一维数组转化为二维数组
本文章实现了数组之间的转换
|
存储
二维数组剖析
二维数组剖析
60 0
|
8月前
|
C语言
二维数组的知识
二维数组的知识
|
存储 算法 编译器
学C的第十二天【深入了解数组:一维和二维数组的创建和初始化;一维和二维数组的使用;一维和二维数组在内存中的存储;数组越界;数组作为函数参数;冒泡排序(对数组名的理解)】-2
5.二维数组的使用 操作符 [ ] :下标引用操作符,它其实就是数组访问的操作符,使用两个[ ],访问行和列 二维数组的行和列都是从0开始的
|
存储 算法 编译器
二维数组的大小
int a[ 3 ] [ 4 ] 数组类型:int [ 3 ] [ 4 ],去掉变量名,就是变量的类型。这就是3行4列共12个int 类型元素的二维数组类型。
169 0