1351. 统计有序矩阵中的负数 - 力扣(LeetCode) (leetcode-cn.com)
int countNegatives(int** grid, int gridSize, int* gridColSize){ int i,j,ans = 0; int r = gridSize; int c = *gridColSize; for(i = 0;i < r;i++) for(j = 0;j < c;j++) { if(grid[i][j] < 0) ++ans; } return ans; }
除了使用暴力法求解外,还可以使用以下方法:
利用
矩阵中的元素无论是按行还是按列,都以非递增顺序排列
这一特性,可以结合回溯法思想,从最右下角开始遍历,首先对一行来说,从最后边开始遍历,直到遇到一个大于等于0的数,此行遍历结束,进入上一行,如果一行的最后一个是正数,直接结束,因为此行及上面的行一定全为正,没必要再比较。int countNegatives(int **grid, int gridSize, int *gridColSize) { if (grid == NULL || gridSize == 0 || (*gridColSize) == 0) { return 0; } int ret = 0; int i, j; for (i = 0; i < gridSize; i++) { for (j = (*gridColSize) - 1; j >= 0; j--) { if (grid[i][j] < 0) { ret++; } else { break; } } } return ret; }
1572. 矩阵对角线元素的和 - 力扣(LeetCode) (leetcode-cn.com)
int diagonalSum(int** mat, int matSize, int* matColSize){ int r = matSize; // (1) int c = matColSize[0]; int i; int ans = 0; for(i = 0; i < r; ++i) { ans += mat[i][i]; // (2) } for(i = 0; i < r; ++i) { if(r-i-1 != i) { ans += mat[i][r-i-1]; // (3) } } return ans; }
1672. 最富有客户的资产总量 - 力扣(LeetCode) (leetcode-cn.com)
int maximumWealth(int** accounts, int accountsSize, int* accountsColSize){ int i, j; int maxv = -1, maxIdx, sumv; for(i = 0; i < accountsSize; ++i) { sumv = 0; for(j = 0; j < *accountsColSize; ++j) { sumv += accounts[i][j]; // (1) } if(sumv > maxv) { maxv = sumv; // (2) maxIdx = i; } } return maxv; }
766. 托普利茨矩阵 - 力扣(LeetCode) (leetcode-cn.com)
int checkSame(int** matrix, int sr, int sc, int maxr, int maxc) { // (1) int step = 0; while(1) { if(sr + step >= maxr) { break; // (2) } if(sc + step >= maxc) { break; // (3) } if(matrix[sr+step][sc+step] != matrix[sr][sc]) { // (4) return false; } ++step; // (5) } return true; // (6) } bool isToeplitzMatrix(int** matrix, int matrixSize, int* matrixColSize){ int r = matrixSize; int c = matrixColSize[0]; int i; for(i = 0; i < c; ++i) { if( !checkSame(matrix, 0, i, r, c) ) { // (7) return false; } } for(i = 0; i < r; ++i) { if( !checkSame(matrix, i, 0, r, c) ) { // (8) return false; } } return true; }