C ++中矩阵中具有奇数值的单元格

假设存在n和m,它们是矩阵的维数。这些由零初始化。并且给出索引,其中索引[i] = [ri,ci]。对于每对[ri,ci],我们必须将ri行和ci列中的所有像元都增加1。输出将是对所有索引应用增量后矩阵中具有奇数值的像元数。

为了解决这个问题,我们将遵循以下步骤-

  • 初始化奇数:= 0和x:=矩阵的行数

  • 创建矩阵垫

  • 当我的范围是0到x

    • mat [j,c]:= mat [j,c] + 1

    • mat [r,j]:= mat [r,j] + 1

    • r =输入[i,0],c =输入[i,1],

    • 对于j,范围从0到m – 1

    • 对于介于0到n – 1的j

    • 对于i,范围为0至n – 1

      • 奇数:=奇数+ mat [i,j]按位或1

      • 对于j:= 0至m – 1

    • 返回奇数

    示例

    让我们看下面的实现以更好地理解-

    #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