【五月集训】第十一天打卡(矩阵)


1351. 统计有序矩阵中的负数

题目链接

统计有序矩阵中的负数

思路

  • 直接两个for循环枚举出每个数是否小于0
  • 第一个循环枚举的是数组的总长度,第二个枚举的数组中每一项的长度

题解

function countNegatives(grid: number[][]): number {
    let res = 0;
    for (let i = 0; i < grid.length; ++i) {
        for (let j = 0; j < grid[i].length; ++j) {
            if (grid[i][j] < 0) {
                res++;
            }
        }
    }
    return res;
};

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

题目链接

最富有客户的资产总量

思路

  • 对于矩阵每一行计算加和
  • 比较获得最大值

题目链接

function maximumWealth(accounts: number[][]): number {
    let res = 0;
    for (let i = 0; i < accounts.length; ++i) {
        let num = 0;
        for (let j = 0; j < accounts[0].length; ++j) {
            num += accounts[i][j];
        }
        res = Math.max(num, res);
    }
    return res;
};

832. 翻转图像

题目链接

翻转图像

思路

  • 枚举每一行进行翻转
  • 对矩阵每一个数字异或1,实现原地翻转

题解

function flipAndInvertImage(image: number[][]): number[][] {
    let i, j;
    let n = image.length, m = image[0].length
    for (i = 0; i < n; ++i) {
        for (j = 0; j < m / 2; ++j) {
            [image[i][j], image[i][m - 1 - j]] = [image[i][m - 1 - j], image[i][j]]
        }
        for (j = 0; j < m; ++j) {
            image[i][j] ^= 1
        }
    }
    return image
};

1329. 将矩阵按对角线排序

题目链接

将矩阵按对角线排序

思路

  • 枚举每行,每列开头对角线元素
  • 往右下角进行遍历塞入另一个数组中,然后进行排序,放回去

题解

function sortDiagonal(mat, m, n, sr, sc) {
    let r, c, x, temp = []
    r = sr, c = sc
    while (r < m && c < n) {
        temp.push(mat[r][c])
        ++r
        ++c
    }
    temp.sort((a, b) => a - b)
    r = sr, c = sc, x = 0
    while (r < m && c < n) {
        mat[r][c] = temp[x++]
        ++r
        ++c
    }
}
function diagonalSort(mat: number[][]): number[][] {
    let m = mat.length
    let n = mat[0].length
    let i
    for (i = 0; i < m; ++i) {
        sortDiagonal(mat, m, n, i, 0)
    }
    for (i = 0; i < n; ++i) {
        sortDiagonal(mat, m, n, 0, i)
    }
    return mat
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值