1351. 统计有序矩阵中的负数 - 力扣(LeetCode) (leetcode-cn.com)
intcountNegatives(int** grid, intgridSize, int* gridColSize){ inti,j,ans = 0; intr = gridSize; intc = *gridColSize; for(i = 0;i < r;i++) for(j = 0;j < c;j++) { if(grid[i][j] < 0) ++ans; } returnans; }
除了使用暴力法求解外,还可以使用以下方法:
利用矩阵中的元素无论是按行还是按列,都以非递增顺序排列
这一特性,可以结合回溯法思想,从最右下角开始遍历,首先对一行来说,从最后边开始遍历,直到遇到一个大于等于0的数,此行遍历结束,进入上一行,如果一行的最后一个是正数,直接结束,因为此行及上面的行一定全为正,没必要再比较。
intcountNegatives(int **grid, intgridSize, int *gridColSize) { if (grid == NULL || gridSize == 0 || (*gridColSize) == 0) { return0; } intret = 0; inti, j; for (i = 0; i < gridSize; i++) { for (j = (*gridColSize) - 1; j >= 0; j--) { if (grid[i][j] < 0) { ret++; } else { break; } } } returnret; }
1572. 矩阵对角线元素的和 - 力扣(LeetCode) (leetcode-cn.com)
intdiagonalSum(int** mat, intmatSize, int* matColSize){ intr = matSize; // (1) intc = matColSize[0]; inti; intans = 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) } } returnans; }
1672. 最富有客户的资产总量 - 力扣(LeetCode) (leetcode-cn.com)
intmaximumWealth(int** accounts, intaccountsSize, int* accountsColSize){ inti, j; intmaxv = -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; } } returnmaxv; }
766. 托普利茨矩阵 - 力扣(LeetCode) (leetcode-cn.com)
intcheckSame(int** matrix, intsr, intsc, intmaxr, intmaxc) { // (1) intstep = 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) returnfalse; } ++step; // (5) } returntrue; // (6) } boolisToeplitzMatrix(int** matrix, intmatrixSize, int* matrixColSize){ intr = matrixSize; intc = matrixColSize[0]; inti; for(i = 0; i < c; ++i) { if( !checkSame(matrix, 0, i, r, c) ) { // (7) returnfalse; } } for(i = 0; i < r; ++i) { if( !checkSame(matrix, i, 0, r, c) ) { // (8) returnfalse; } } returntrue; }