
二维vector的一些细节(用于实现LeetCode566.重塑矩阵)
题目描述给定一个数字序列和目标行数与列数,重塑这个序列成一个目标维度的矩阵。关键点在于确保总的元素数与新矩阵的行数和列数组合后保持一致。
发布日期:2021-05-20 07:54:54
浏览次数:24
分类:精选文章
本文共 1762 字,大约阅读时间需要 5 分钟。
二维向量与矩阵的细节
一、向量的定义与初始化
1.1 向量的定义向量是一种存储一维数据的数据结构,可以包含多个元素。在C++中,二维向量通常由一个二维数组表示,形如V(r, c),其中r表示行数,c表示列数。每个向量可以看作一个r×c的矩阵,因此通常可以用二维数组的形式存储。
示例代码:
vector> V(r, vector (c));
解释:
r
表示向量中的行数c
表示每行的列数V(r, c)
创建一个r行c列的二维向量
1.2 行列数的获取要获取向量的行数和列数,可以使用以下方法:行数:row = V.size();
列数:col = V[0].size();
需要注意:
- 如果向量为空,
V[0].size()
可能会出错 - 因此,推荐在获取列数前先检查向量是否为空
二、LeetCode566:重塑矩阵
示例:数字序列:1, 2, 3, 4目标行数:2目标列数:2结果:2 44 1
提示:
- 类似磁盘管理的位示图法,每个数对应一个特定的位置
- AC代码解析以下是通过C++实现的重塑函数:
- 首先检查总元素数与目标矩阵的元素数是否一致
- 如果不一致,直接返回原矩阵
- 否则,创建目标维度的新矩阵
- 使用循环依次将源矩阵的元素进行重塑
- 代码理解
id
用于跟踪源数据中的元素位置id / col
获取当前目标行对应的源行索引id % col
获取目标行中当前行对应的源列索引id++
逐个填充元素
#includeusing namespace std;class Solution {public: vector > matrixReshape(vector > nums, int r, int c) { int rows = nums.size(); int cols = nums[0].size(); if (r * c != rows * cols) { return nums; } vector > ans(r, vector (c)); int id = 0; for (int i = 0; i < r; ++i) { for (int j = 0; j < c; ++j) { ans[i][j] = nums[id / cols][id % cols]; id++; } } return ans; }};
实现逻辑:
vector> matrixReshape( vector > nums, int r, int c){ int row = nums.size(); int col = nums[0].size(); // 如果目标行列数与实际数不符,返回原数据 if(r * c != row * col) return nums; // 创建重塑后的矩阵 vector > ans(r, vector (c)); // 计算ID索引 int id = 0; // 遍历目标矩阵填充数据 for(int i=0; i
3.1 编码要点
这一算法类似磁盘管理中的位示图法,通过简单的数学运算实现高效的空间分配。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年05月06日 13时52分04秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MATLAB实现各种熵:香农熵、条件熵、模糊熵、样本熵等
2025-04-12
MATLAB实现各种离散概率密度函数(概率密度/分布/逆概率分布函数)
2025-04-12
MATLAB实现基于遗传算法/引力搜索算法优化新安江水文模型
2025-04-12