Leetcode 2482:行和列中一和零的差值

题目描述:

给你一个下标从 0 开始的 m x n 二进制矩阵 grid 。

我们按照如下过程,定义一个下标从 0 开始的 m x n 差值矩阵 diff :

  • 令第 i 行一的数目为 onesRowi 。
  • 令第 j 列一的数目为 onesColj 。
  • 令第 i 行零的数目为 zerosRowi 。
  • 令第 j 列零的数目为 zerosColj 。
  • diff[i][j] = onesRowi + onesColj - zerosRowi - zerosColj

请你返回差值矩阵 diff 。

示例:

输入:grid = [[0,1,1],[1,0,1],[0,0,1]]
输出:[[0,0,4],[0,0,4],[-2,-2,2]]

题目分析:

首先明白,本题需要返回一个二维数组,经过题目分析可以得出,可以将原数组进行操作后返回,不需要再创建一个新的二维数组。

本题精髓在于获取每行,每列对应的一或零的数量,所以需要遍历数组。遍历数组需要获取每行的长度与数组列的长度,所以当获取当每行的1的数量时,就可以用行的长度来推导出每行的零的数量。列也是同样的道理。

最后获取到题目要求的数据后再进行遍历数组,进行操作,最后输出。

java解法:

class Solution {
    public int[][] onesMinusZeros(int[][] grid) {
        int n = grid.length;//获取列的长的
        int m = grid[0].length;//获取行的长度
        int[] row = new int[n];//储存每行一的数量
        int[] col = new int[m];//储存每列零的数量
        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                if(grid[i][j] == 1){
                    row[i]++;//进行一的储存
                }else{
                    col[j]++;//进行零的储存
                }
            }
        }
        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                grid[i][j] = 2 * row[i] - 2 * col[j] + n - m;//数据操作     
            }
        }
        return grid;/返回数组
    } 
}

代码分析:

row数组对应的题目数据就是onesRowi.

col数组对应的题目数据就是zerosColj.

代码区域n值:n = zerosColj + onesColj

              m值:m = zerosRowi + onesRowi

所以代码中对应的操作:2 * row[i] - 2 * col[j] + n - m就等于题目中所要求的操作

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值