假设存在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