标签:数组 int LeetCode vector result 2022 original 指针
解题思路:
1、判断数组original的长度是否为m*n,不是,则返回空数组;相等,则进行下一步。
2、想法:
- 生成m*n的二维数组,双重循环遍历original,一个一个填入
- 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:网上找的)
标签:数组,int,LeetCode,vector,result,2022,original,指针 来源: https://blog.csdn.net/m0_52510770/article/details/122266101
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。