LeetCode:2022.将一维数组转变为二维数组

解题思路:

1、判断数组original的长度是否为m*n,不是,则返回空数组;相等,则进行下一步。

2、想法:

  1. 生成m*n的二维数组,双重循环遍历original,一个一个填入
  2. 1的优化吧,二维数组第一行为0~n-1,第二行为n~2n-1,直接把这一段数组赋值给二维数组的每一行

本以为自己的想法太简单,结果好像真就是这样,是简单题没跑了。。

想法一的代码就没弄了,想法2的话就是会多一些函数的调用代码如下

public:
    vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) {
        int length = original.size();
        if (length != m*n) {
            return {};
        }
        vector<vector<int>> result;
        result.reserve(m);
        
        for (auto i = original.begin(); i != original.end(); i+=n) {
            result.emplace_back(i, i+n);
        }

        return result;
    }
};

总结几个上面代码一开始自己写的时候范的错译(ps:部分是因为好久没碰,忘记了)

  • vector.reserve()可以很好的缩减空间,减少空间复杂度
  • emplace_back函数里放的是指针,不是vector数组的下标,所以for循环里要用begin,end函数
  • original.begin()前面的类型可以是auto或vector<int>::iterator,int*是不对的。
  • 对于上面一个的解释:迭代器是广义上的指针,事实上,它可以是指针,也可以是一个对其执行类似指针的操作。通过将指针广义化为迭代器,让STL能够为各种不同的容器类(包括哪些简单指针无法处理的类)提供统一的接口。每个容器类都定义了一个合适的迭代器,该迭代器的类型是一个名为iterator的typedef,其作用域为整个类。(ps:网上找的)
     

上一篇:leetcode:将一维数组转变成二维数组


下一篇:leetcode(力扣) 2022. 将一维数组转变成二维数组(新年快乐)