LeetCode #1252 Cells with Odd Values in a Matrix 奇數(shù)值單元格的數(shù)目

1252 Cells with Odd Values in a Matrix 奇數(shù)值單元格的數(shù)目

Description:
Given n and m which are the dimensions of a matrix initialized by zeros and given an array indices where indices[i] = [ri, ci]. For each pair of [ri, ci] you have to increment all cells in row ri and column ci by 1.

Return the number of cells with odd values in the matrix after applying the increment to all indices.

Example:

Example 1:


Matrix 1

Input: n = 2, m = 3, indices = [[0,1],[1,1]]
Output: 6
Explanation: Initial matrix = [[0,0,0],[0,0,0]].
After applying first increment it becomes [[1,2,1],[0,1,0]].
The final matrix will be [[1,3,1],[1,3,1]] which contains 6 odd numbers.

Example 2:


Matrix 2

Input: n = 2, m = 2, indices = [[1,1],[0,0]]
Output: 0
Explanation: Final matrix = [[2,2],[2,2]]. There is no odd number in the final matrix.

Constraints:

1 <= n <= 50
1 <= m <= 50
1 <= indices.length <= 100
0 <= indices[i][0] < n
0 <= indices[i][1] < m

題目描述:
給你一個 n 行 m 列的矩陣,最開始的時候,每個單元格中的值都是 0。

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

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

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

示例 :

示例 1:


矩陣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 個奇數(shù)。

示例 2:


矩陣2

輸入:n = 2, m = 2, indices = [[1,1],[0,0]]
輸出:0
解釋:最后的矩陣是 [[2,2],[2,2]],里面沒有奇數(shù)。

提示:

1 <= n <= 50
1 <= m <= 50
1 <= indices.length <= 100
0 <= indices[i][0] < n
0 <= indices[i][1] < m

思路:

  1. 按照題目要求, 設置一個二維數(shù)組, 找到里面的奇數(shù)輸出即可
    時間復雜度O(pq), 空間復雜度O(mn), 其中 p為 indices的長度, q為 max(m ,n)
  2. 因為每次只用考慮行或者列, 可以只用一維數(shù)組記錄行和列的變化, 然后最后去掉交叉的部分(不清楚可以畫 venn圖)
    時間復雜度O(p), 空間復雜度O(q), 其中 p為 indices的長度, q為 max(m ,n)

代碼:
C++:

class Solution 
{
public:
    int oddCells(int n, int m, vector<vector<int>>& indices) 
    {
        vector<int> row(n), col(m);
        for (auto indice : indices) row[indice[0]] ^= 1, col[indice[1]] ^= 1;
        int r = accumulate(row.begin(), row.end(), 0), c = accumulate(col.begin(), col.end(), 0);
        return r * m + c * n - 2 * r * c;
    }
};

Java:

class Solution {
    public int oddCells(int n, int m, int[][] indices) {
        int row[] = new int[n], col[] = new int[m], result = 0;
        for (int[] indice : indices) {
            row[indice[0]] ^= 1; 
            col[indice[1]] ^= 1;
        }
        for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (((row[i] + col[j]) & 1) == 1) ++result;
        return result;
    }
}

Python:

class Solution:
    def oddCells(self, n: int, m: int, indices: List[List[int]]) -> int:
        matrix = [[0 for _ in range(m)] for _ in range(n)]
        for i, j in indices:
            for col in range(m):
                matrix[i][col] += 1
            for row in range(n):
                matrix[row][j] += 1
        return sum(i & 1 for row in matrix for i in row)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1252. 奇數(shù)值單元格的數(shù)目 題目描述 給你一個 n 行 m 列的矩陣,最開始的時候,每個單元格中的值都是 0。...
    肥肥的大肥鵝閱讀 364評論 0 0
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,061評論 0 2
  • TF API數(shù)學計算tf...... :math(1)剛開始先給一個運行實例。tf是基于圖(Graph)的計算系統(tǒng)...
    MachineLP閱讀 4,066評論 0 1
  • 你想擁有未必擁有!你不想擁有它偏偏自然的來!感情這種東西只能順其自然!到現(xiàn)在我還是沒有勇氣去追求自己喜歡的的東西!...
    小瑩籽兒閱讀 219評論 0 0
  • 感恩慈悲上師三寶及諸佛菩薩加持庇佑 讓我堅持修行 懂得感恩 感恩每天時刻提醒自己言行 感恩佛光普照大地 謝謝 謝謝...
    王小仙的天涯閱讀 128評論 0 0

友情鏈接更多精彩內(nèi)容