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

在这里插入图片描述

LeetCode系列文章

文章目录

  • 一、题目描述
  • 二、示例
  • 三、主体思路
  • 四、代码实现
    • 1、新手用vector
    • 2、老手用vector
    • 3、大佬用vector

一、题目描述

  给你一个下标从 0 0 0开始的一维数组 o r i g i n a l original original和两个整数 m m m n n n,你需要使用original中所有元素创建一个 m m m n n n列的二维数组。

   o r i g i n a l original original中下标从 0 0 0 n − 1 n-1 n1(都包含)的元素构成二维数组的第一行,下标从 n n n 2 × n − 1 2\times n-1 2×n1(都包含)的元素构成二维数组的第二行,依此类推。

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

二、示例

  输入: o r i g i n a l = [ 1 , 2 , 3 , 4 ] , m = 2 , n = 2 original = [1, 2, 3, 4], m = 2, n = 2 original=[1,2,3,4],m=2,n=2
  输出: [ [ 1 , 2 ] , [ 3 , 4 ] ] [ [1, 2], [3, 4] ] [[1,2],[3,4]]
leetcode2022. 将一维数组转变成二维数组_第1张图片

三、主体思路

首先需要判断 o r i g i n a l original original数组是否可以构成一个 m × n m \times n m×n的二维数组,如果无法构成则直接返回一个空的二维数组即可;如果可以构成,那么每次从 o r i g i n a l original original数组中取出 n n n个元素作为二维数组中的某一行,直到 o r i g i n a l original original数组当中的元素被取完。
leetcode2022. 将一维数组转变成二维数组_第2张图片

四、代码实现

1、新手用vector

这里每次在取 n n n个元素作为二维数组的某一行时,我们通常会依次取 n n n个元素,将这n个元素依次插入到一个临时数组中,最后再将这个临时数组当中的数据插入到二维数组当中,重复这个过程,直到将 o r i g i n a l original original数组当中的元素取完。
leetcode2022. 将一维数组转变成二维数组_第3张图片

2、老手用vector

但实际上取 n n n个元素插入到临时数组不必这么麻烦,我们可以通过这 n n n个元素的首尾迭代器构建出一个临时数组,然后将这个临时数组当中的数据插入到二维数组当中。
leetcode2022. 将一维数组转变成二维数组_第4张图片

3、大佬用vector

实际C++11中给 v e c t o r vector vector容器新引入了成员函数emplace_back,此时我们根本不用自己创建临时数组,每次向二维数组插入 n n n个元素时,直接传入这 n n n个元素的首尾迭代器即可。
leetcode2022. 将一维数组转变成二维数组_第5张图片

你可能感兴趣的:(leetcode,leetcode,c++,算法)