C++矩陣中奇數值單元格


假設n和m是矩陣的維度,它們被初始化為零。給出索引,其中indices[i] = [ri, ci]。對於每一對[ri, ci],我們必須將第ri行和第ci列中的所有單元格遞增1。輸出將是在對所有索引應用遞增後矩陣中奇數值單元格的數量。

為了解決這個問題,我們將遵循以下步驟:

  • 初始化 odd := 0,x := 矩陣的行數
  • 建立一個矩陣 mat
  • 對於 i 從 0 到 x
    • r = input[i, 0],c = input[i, 1]
    • 對於 j 從 0 到 m – 1
      • mat[r, j] := mat[r, j] + 1
    • 對於 j 從 0 到 n – 1
      • mat[j, c] := mat[j, c] + 1
  • 對於 i 從 0 到 n – 1
    • 對於 j := 0 到 m – 1
      • odd := odd + (mat[i, j] 與 1 進行按位或運算)
  • 返回 odd

示例

讓我們看看下面的實現,以便更好地理解:

 線上演示

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
      int oddCells(int n, int m, vector<vector<int>>& in) {
      int odd = 0;
      int x = in.size();
      vector < vector <int> > mat(n, vector <int>(m));
      for(int i = 0; i < x ;i++){
         int r = in[i][0];
         int c = in[i][1];
         for(int j = 0; j < m; j++){
            mat[r][j]++;
         }
         for(int j = 0; j < n; j++){
            mat[j][c]++;
         }
      }
      for(int i = 0; i < n; i++){
         for(int j = 0; j < m; j++)odd += mat[i][j] & 1;
      }
      return odd;
   }
};
main(){
   Solution ob;
   vector<vector<int>> c = {{0,1},{1,1}};
   cout << ob.oddCells(2,3,c);
}

輸入

2
3
{{0,1},{1,1}}

輸出

6

更新於:2020年4月29日

297 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.