【万人千题】一些有关矩阵题目的解题报告
2021/11/29 23:06:04
本文主要是介绍【万人千题】一些有关矩阵题目的解题报告,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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++,即可找到一共有几个数。
这篇关于【万人千题】一些有关矩阵题目的解题报告的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?
- 2024-05-30java excel上传--poi
- 2024-05-30安装笔记本应用商店的pycharm,再安排pandas等模块,说是没有打包工具?
- 2024-05-29java11新特性