給你乙個 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...