leetcode 1252 奇數值單元格的數目

2021-10-06 07:27:40 字數 1831 閱讀 9991

給你乙個 n 行 m 列的矩陣,最開始的時候,每個單元格中的值都是 0。

另有乙個索引陣列 indices,indices[i] = [ri, ci] 中的 ri 和 ci 分別表示指定的行和列(從 0 開始編號)。

你需要將每對 [ri, ci] 指定的行和列上的所有單元格的值加 1。

請你在執行完所有 indices 指定的增量操作後,返回矩陣中 「奇數值單元格」 的數目。

示例 1:

輸入:n = 2, m = 3, indices = [[0,1],[1,1]]

輸出:6

解釋:最開始的矩陣是 [[0,0,0],[0,0,0]]。

第一次增量操作後得到 [[1,2,1],[0,1,0]]。

最後的矩陣是 [[1,3,1],[1,3,1]],裡面有 6 個奇數。

示例 2:

輸入:n = 2, m = 2, indices = [[1,1],[0,0]]

輸出:0

解釋:最後的矩陣是 [[2,2],[2,2]],裡面沒有奇數。

可以用陣列直接模擬,但沒必要

簡化模擬:

由於每次操作只會將一行和一列的數增加 1,可以使用乙個行陣列 rows 和列陣列 cols 分別記錄每一行和每一列被增加的次數。對於 indices 中的每一對 [ri, ci],將 rows[ri] 和 cols[ci] 的值分別增加 1。

在所有操作模擬完畢後,矩陣中位於 (x, y) 位置的數即為 rows[x] + cols[y]。遍歷矩陣,就可以得到奇數的數目。

繼續優化:

**矩陣中位於 (x, y) 位置的數為奇數,當且僅當 rows[x] 和 cols[y] 中恰好有乙個為奇數。**因此對於 rows[x] 為偶數,那麼在第 x 行有count_odd(cols)個位置的數為奇數;對於 rows[x] 為奇數,那麼在第 x 行有m - count_odd(cols)個位置的數為偶數,其中count_odd()表示陣列中奇數的個數。最後可以得到奇數的數目為(n - count_odd(rows)) * count_odd(cols) + count_odd(rows) * (m - count_odd(cols))。

class

solution

int odd_row =

0, odd_col =0;

for(

int i : row)

}for

(int i : col)

}return odd_row *

(m - odd_col)

+(n - odd_row)

* odd_col;

}}

class

solution

int odd_row =

0, odd_col =0;

for(

boolean r : row)

}for

(boolean c : col)

}return odd_row *

(m - odd_col)

+(n - odd_row)

* odd_col;

}}

1252 奇數值單元格的數目

給你乙個 n 行 m 列的矩陣,最開始的時候,每個單元格中的值都是 0。另有乙個索引陣列 indices,indices i ri,ci 中的 ri 和 ci 分別表示指定的行和列 從 0 開始編號 你需要將每對 ri,ci 指定的行和列上的所有單元格的值加 1。最後我們要求的是矩陣中的奇數的個數,...

leetcode 奇數值單元格的數目 筆記

1,行和列分別累加數字 2,行和列分別計算奇數數量 3,使用公式算出總奇數數量 注意,此演算法操作中一直以一維陣列操作和數字操作,不要聯想到二維而被思維誤導。執行用時 56 ms,在所有 python3 提交中擊敗了71.23 的使用者 記憶體消耗 13.8 mb,在所有 python3 提交中擊敗...

奇數值結點鍊錶

輸入樣例 1 2 2 3 4 5 6 7 1 輸出樣例 1 3 5 7 2 2 4 6 include include struct listnode struct listnode readlist struct listnode getodd struct listnode l void pri...