IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【万人千题】一些有关矩阵题目的解题报告 -> 正文阅读

[数据结构与算法]【万人千题】一些有关矩阵题目的解题报告

1,1351. 统计有序矩阵中的负数 - 力扣(LeetCode) (leetcode-cn.com)

int countNegatives(int** grid, int gridSize, int* gridColSize)
{
     int row=gridSize;
     int col=gridColSize[0];
     int count=0;
     int i=0;
     for(i=0;i<row;i++)
     {
         int j=0;
         for(j=0;j<col;j++)
         if(grid[i][j]<0)
         count++;
     }
    return count;
}

遍历数组,寻找目标数即可。

2,1572. 矩阵对角线元素的和 - 力扣(LeetCode) (leetcode-cn.com)

int diagonalSum(int** mat, int matSize, int* matColSize)
{
     int row=matSize;
     int col=*matColSize;
     int i=0;
     int sum=0;
     for(i=0;i<row;i++)
     {
         sum+=mat[i][i];
     }
     for(i=row-1;i>=0;i--)
     {
         sum+=mat[i][row-i-1];
     }
     if(matSize%2!=0)
     {
         sum-=mat[matSize/2][matSize/2];
     }
     return sum;
}

找到对角线的规律,注意列数是奇数时减去一个最中间的数即可。

3,1672. 最富有客户的资产总量 - 力扣(LeetCode) (leetcode-cn.com)

int maximumWealth(int** accounts, int accountsSize, int* accountsColSize)
{
        int row=accountsSize;
        int col=accountsColSize[0];
        int sum=0;
        int i=0;
        int j=0;
        for(j=0;j<col;j++)
        sum+=accounts[i][j];
        for(i=1;i<row;i++)
        {
            j=0;
            int tmp=0;
            for(;j<col;j++)
             tmp+=accounts[i][j];
             if(tmp>sum)
             sum=tmp;
        }
        return sum;
}

遍历相加,取最大即可。

4,766. 托普利茨矩阵 - 力扣(LeetCode) (leetcode-cn.com)

bool isToeplitzMatrix(int** matrix, int matrixSize, int* matrixColSize)
{
    int row=matrixSize;
    int col=matrixColSize[0];
    int i=0;
    for(i=0;i<row;i++)
    {
        int j=i+1;
        int k=1;
        //int max=col>row?col:row;
        for(;j<row&&k<col;j++,k++)
        {
            if(matrix[j][k]!=matrix[i][0])
             return false;
        }
    }
    for(i=1;i<col;i++)
    {
        int j=1;
        int k=i+1;
        // int max=col>row?col:row;
        for(j=1;j<row&&k<col;j++,k++)
        {
            if(matrix[j][k]!=matrix[0][i])
              return false;
        }
    }
    return true;
}

思路是从0行和0列分别开始,0行的先全试完,然后0列的去试,注意找到对角线的规律。还有一个需要注意的点是,从0行,0列分别开始的原因是其是最开始的数,如果后面的数一旦没有与其相等就不需要再判断了。也就是作为基准的数已经确定了,只需要变比较的数即可。

5,1380. 矩阵中的幸运数 - 力扣(LeetCode) (leetcode-cn.com)

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
 bool num(int** arr,int i,int j,int row,int col)
 {
     int m=0;
     for(m=0;m<row;m++)
     {
         if(m==i)
         continue;
         if(arr[i][j]<arr[m][j])
           return false;
     }
     for(m=0;m<col;m++)
     {
         if(m==j)
         continue;
         if(arr[i][j]>arr[i][m])
          return false;
     }
     return true;
 }
int* luckyNumbers (int** matrix, int matrixSize, int* matrixColSize, int* returnSize)
{
     int*ans=(int*)malloc(sizeof(int)*matrixSize);
     int i=0;
     int count=0;
     for(i=0;i<matrixSize;i++)
     {
         int j=0;
         for(j=0;j<*matrixColSize;j++)
         {
             if(num(matrix,i,j,matrixSize,*matrixColSize))
               {
                   ans[count]=matrix[i][j];
                   count++;
               }
         }
     }
     *returnSize=count;
     return ans;
}

//解法二:
// int* luckyNumbers (int** matrix, int matrixSize, int* matrixColSize, int* returnSize)
// {
//     int row=matrixSize;
//     int col=*matrixColSize;
//      int*ans=(int*)malloc(sizeof(int)*matrixSize);
//      int i=0;
//      int count=0;
//      for(i=0;i<matrixSize;i++)
//      {
//          int j=0;
//          for(j=0;j<col;j++)
//          {
//                  int m=0;
//             for(m=0;m<row;m++)
//            {
//          if(m==i)
//          continue;
//          if(matrix[i][j]<matrix[m][j])
//            goto again;
//           }
//         for(m=0;m<col;m++)
//           {
//          if(m==j)
//          continue;
//          if(matrix[i][j]>matrix[i][m])
//             goto again;
//           }
//          ans[count]=matrix[i][j];
//                     count++;
//         again:
//         ;   
//          }
//      }
//      *returnSize=count;
//      return ans;
// }

两种解法,但是大同小异,一种用函数,一种没用。思路就是遍历数组,一个一个去比,放入函数中,然后在函数中把对应的行和列确定下来,一个一个和目标数进行对比,一旦出现预期外的结果就返回false,若都过了就会返回true。这样即可找到数字。

6,1582. 二进制矩阵中的特殊位置 - 力扣(LeetCode) (leetcode-cn.com)

bool judge(int**mat,int i,int j,int row,int col)
{
    int m=0;
    for(;m<row;m++)
    {
        if(m==i)
        continue;
        if(mat[m][j]!=0)
        return false;
    }
    for(m=0;m<col;m++)
    {
        if(m==j)
        continue;
        if(mat[i][m]!=0)
        return false;
    }
    return true;
}
int numSpecial(int** mat, int matSize, int* matColSize)
{
     int row=matSize;
     int col=*matColSize;
     int i=0;
     int count=0;
     for(i=0;i<row;i++)
     {
         int j=0;
         for(j=0;j<col;j++)
         {
             if(mat[i][j]==1)
             if(judge(mat,i,j,row,col))
             count++;
         }
     }
     return count;
}

与上一题思路其实差不多,这题会更简洁一点,找到对应行列元素,看看是不是0即可。返回后count++,即可找到一共有几个数。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:52:09  更:2021-11-30 15:54:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:35:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码