跟着英雄学算法--矩阵

简介: 跟着英雄学算法--矩阵

目录

1.力扣题分析

2.最富有客户的资产总量

3.转置矩阵

4.旋转图像

5.回旋矩阵(方阵)

矩阵力扣题讲解

image.png

int** flipAndInvertImage(int** image, int imageSize, int* imageColSize, int* returnSize, int** returnColumnSizes){
    int i, j, col;
    int **ret = (int **)malloc( sizeof(int *) * imageSize );        // (1)
    *returnColumnSizes = (int *)malloc( sizeof(int) * imageSize );  // (2)
    for(i = 0; i < imageSize; ++i) {
        col = imageColSize[i];                                      // (3)
        ret[i] = (int *)malloc( sizeof(int) * col );                // (4)
        (*returnColumnSizes)[i] = col;                              // (5)
        for(j = 0; j < col; ++j) {
            ret[i][j] = 1 - image[i][ col-1-j ];                    // (6)
        }
    }
    *returnSize = imageSize;                                        // (7)
    return ret;                                                     // (8)
}

image.png

1.最富有客户的资产总量

image.png

输入:accounts = [[1,2,3],[3,2,1]]
输出:6
解释:
第 1 位客户的资产总量 = 1 + 2 + 3 = 6
第 2 位客户的资产总量 = 3 + 2 + 1 = 6
两位客户都是最富有的,资产总量都是 6 ,所以返回 6 。

image.png

输入:accounts = [[1,5],[7,3],[3,5]]
输出:10
解释:
第 1 位客户的资产总量
 = 6
第 2 位客户的资产总量
 = 10 
第 3 位客户的资产总量
 = 8
第 2 位客户是最富有的,资产总量是 10

image.png

int maximumWealth(int** accounts, int accountsSize, int* accountsColSize){
int i,j,col;
int arr[accountsSize];//用一个arr数组来接收每行和
memset(arr,0,accountsSize*sizeof(int));同时要对他初始化为0
int max;//定义max为最终最大返回值
for(i=0;i<accountsSize;i++)
{
    for(j=0;j<accountsColSize[i];j++)
    {
        arr[i]+=accounts[i][j];
    } 
}
max=arr[0];//max赋初值第一个元素
for(i=0;i<accountsSize;i++)
{
    if(max<arr[i])
    {
        max=arr[i];
    }
}
return max;
}

image.pngimage.pngimage.png

/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes)
{
int i,j,col;    
col=matrixColSize[0];//
int **ret=(int **)malloc(sizeof(int*)*col);      //ret的行数是matrix的列数
*returnColumnSizes=(int*)malloc(sizeof(int)*col);//*returnColumnSize返回的每行的个数是原二维数组的列数
*returnSize=col;      //返回的行数是原来的列数                        
for(i=0;i<col;i++)      
{          
    (*returnColumnSizes)[i]=matrixSize;//返回每行的列数是原来的行数
    ret[i]=(int *)malloc(sizeof(int)*matrixSize);
}
for(i=0;i<matrixSize;i++)
{    
    for(j=0;j<col;j++)
    {
        ret[j][i]=matrix[i][j];
    }
}
return ret;
}

旋转图像 image.pngimage.png

void rotate(int** matrix, int matrixSize, int* matrixColSize){
int i=0;
int j=0;
int col;
int arr[matrixSize][matrixSize];//开辟一个arr二维数组,长度是matrixsize
for(i=0;i<matrixSize;i++)
{
    col=matrixColSize[i];       //col是每行的列数
for(j=0;j<col;j++)
{
    arr[j][col-1-i]=matrix[i][j];//因为是对matrix的i和j的遍历,所以matrix是[i][j],
                                   arr是规律是arr[j][col-1-i]
}
}
for(i=0;i<matrixSize;i++)
{
    col=matrixColSize[i];
    for(j=0;j<col;j++)
    {
        matrix[i][j]=arr[i][j];//arr是已经旋转之后的数组,同时因为要旋转,所以要对原来的数组进行改变,把arr赋给matrix
    }
}
return matrix;
}

回旋矩阵

int main()
{
  int i, j;
  int m = 3;
  int n = 3;
  int ret[10][10];
  memset(ret, 0, sizeof(ret));用memset内存函数对ret初始化为0
  int count = 1;
  for (i = 0; i < n / 2; i++)
  {
    //向右
    for (j = i; j < m - i; j++)
    {
      ret[i][j] = count++;
    }
    //向下
    for (j = i + 1; j < n - i; j++)
    {
      ret[j][m - 1 - i] = count++;
    }
    for (j = m - 2 - i; j >= i; j--)
    {
      ret[n - 1 - i][j] = count++;
    }
    for (j = n - 2 - i; j > i; j--)
    {
      ret[j][i] = count++;
    }
    if (n % 2 == 1)//假如n是奇数的话,中间还要填一个数
    {
      ret[n / 2][m / 2] = n * m;
    }
  }
  for (i = 0; i < n; i++)
  {
    for (j = 0; j < m; j++)
    {
      printf("%d ", ret[i][j]);
    }
    printf("\n");
  }
相关文章
【动态规划】【矩阵快速幂】【滚动向量】C++算法552. 学生出勤记录 II
【动态规划】【矩阵快速幂】【滚动向量】C++算法552. 学生出勤记录 II
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-48 算法训练 关联矩阵
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-48 算法训练 关联矩阵
85 0
【动态规划】【矩阵快速幂】【滚动向量】C++算法552. 学生出勤记录 II
【动态规划】【矩阵快速幂】【滚动向量】C++算法552. 学生出勤记录 II
【灵码助力Cuda算法分析】分析共享内存的矩阵乘法优化
本文介绍了如何利用通义灵码在Visual Studio 2022中对基于CUDA的共享内存矩阵乘法优化代码进行深入分析。文章从整体程序结构入手,逐步深入到线程调度、矩阵分块、循环展开等关键细节,最后通过带入具体值的方式进一步解析复杂循环逻辑,展示了通义灵码在辅助理解和优化CUDA编程中的强大功能。
django调用矩阵分解推荐算法模型做推荐系统
django调用矩阵分解推荐算法模型做推荐系统
77 4
动态规划算法学习一:DP的重要知识点、矩阵连乘算法
这篇文章是关于动态规划算法中矩阵连乘问题的详解,包括问题描述、最优子结构、重叠子问题、递归方法、备忘录方法和动态规划算法设计的步骤。
272 0
|
7月前
|
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
88 6
【算法 | 实验18】在字符矩阵中查找给定字符串的所有匹配项
题目描述 题目 在字符矩阵中查找给定字符串的所有匹配项 给定一个M×N字符矩阵,以及一个字符串S,找到在矩阵中所有可能的连续字符组成的S的次数。所谓的连续字符,是指一个字符可以和位于其上下左右,左上左下,右上右下8个方向的字符组成字符串。用回溯法求解。
152 1
算法金 | 协方差、方差、标准差、协方差矩阵
**摘要:** 本文介绍了统计学中的基础概念,包括方差、标准差、协方差及其矩阵。方差衡量数据的分散程度,标准差是方差的平方根,提供相同单位下的波动度量。协方差则分析两个变量的关联性,正负值表示正负相关。协方差矩阵扩展到多变量情况,展示多个变量间的关系。这些工具在金融、质量控制、机器学习等领域有广泛应用。文章通过实例和公式清晰解释了每个概念,并强调理解它们之间的关系对于数据分析和统计建模的重要性。
118 0
算法金 | 协方差、方差、标准差、协方差矩阵

热门文章

最新文章