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()前面的类型可以是autovector<int>::iterator,int*是不对的。
  • 对于上面一个的解释:迭代器是广义上的指针,事实上,它可以是指针,也可以是一个对其执行类似指针的操作。通过将指针广义化为迭代器,让STL能够为各种不同的容器类(包括哪些简单指针无法处理的类)提供统一的接口。每个容器类都定义了一个合适的迭代器,该迭代器的类型是一个名为iterator的typedef,其作用域为整个类。(ps:网上找的)
     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值