二维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

    提示:

    • 类似磁盘管理的位示图法,每个数对应一个特定的位置
    1. AC代码解析以下是通过C++实现的重塑函数:
    2. #include 
      using 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; }};

      实现逻辑:

      • 首先检查总元素数与目标矩阵的元素数是否一致
      • 如果不一致,直接返回原矩阵
      • 否则,创建目标维度的新矩阵
      • 使用循环依次将源矩阵的元素进行重塑
      1. 代码理解
      2. 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 编码要点

        • id 用于跟踪源数据中的元素位置
        • id / col 获取当前目标行对应的源行索引
        • id % col 获取目标行中当前行对应的源列索引
        • id++ 逐个填充元素

        这一算法类似磁盘管理中的位示图法,通过简单的数学运算实现高效的空间分配。

    上一篇:在VSCode上配置编写LaTex文档的环境
    下一篇:partition函数和stable_partition函数的小示例

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年05月06日 13时52分04秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章