For each cell, we need the number of ones and zeros in its row and column. We can precompute these counts for all rows and columns, then use them to fill the diff matrix efficiently.
funconesMinusZeros(grid [][]int) [][]int {
m, n:= len(grid), len(grid[0])
onesRow, zerosRow:= make([]int, m), make([]int, m)
onesCol, zerosCol:= make([]int, n), make([]int, n)
fori:=0; i < m; i++ {
forj:=0; j < n; j++ {
ifgrid[i][j] ==1 {
onesRow[i]++onesCol[j]++ } else {
zerosRow[i]++zerosCol[j]++ }
}
}
diff:= make([][]int, m)
fori:=0; i < m; i++ {
diff[i] = make([]int, n)
forj:=0; j < n; j++ {
diff[i][j] = onesRow[i] +onesCol[j] -zerosRow[i] -zerosCol[j]
}
}
returndiff}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution {
publicint[][]onesMinusZeros(int[][] grid) {
int m = grid.length, n = grid[0].length;
int[] onesRow =newint[m], zerosRow =newint[m], onesCol =newint[n], zerosCol =newint[n];
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
if (grid[i][j]== 1) { onesRow[i]++; onesCol[j]++; }
else { zerosRow[i]++; zerosCol[j]++; }
int[][] diff =newint[m][n];
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
diff[i][j]= onesRow[i]+ onesCol[j]- zerosRow[i]- zerosCol[j];
return diff;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
classSolution {
funonesMinusZeros(grid: Array<IntArray>): Array<IntArray> {
val m = grid.size
val n = grid[0].size
val onesRow = IntArray(m)
val zerosRow = IntArray(m)
val onesCol = IntArray(n)
val zerosCol = IntArray(n)
for (i in0 until m)
for (j in0 until n)
if (grid[i][j] ==1) { onesRow[i]++; onesCol[j]++ }
else { zerosRow[i]++; zerosCol[j]++ }
val diff = Array(m) { IntArray(n) }
for (i in0 until m)
for (j in0 until n)
diff[i][j] = onesRow[i] + onesCol[j] - zerosRow[i] - zerosCol[j]
return diff
}
}
1
2
3
4
5
6
7
8
9
classSolution:
defonesMinusZeros(self, grid: list[list[int]]) -> list[list[int]]:
m, n = len(grid), len(grid[0])
ones_row = [sum(row) for row in grid]
zeros_row = [n - x for x in ones_row]
ones_col = [sum(grid[i][j] for i in range(m)) for j in range(n)]
zeros_col = [m - x for x in ones_col]
diff = [[ones_row[i] + ones_col[j] - zeros_row[i] - zeros_col[j] for j in range(n)] for i in range(m)]
return diff