C++の行列に奇数値を持つセル
行列の次元であるnとmがあるとします。これらはゼロで初期化されます。そして、インデックスは、indexes [i] =[ri、ci]で与えられます。 [ri、ci]の各ペアについて、行riと列ciのすべてのセルを1ずつインクリメントする必要があります。出力は、すべてのインデックスに増分を適用した後、マトリックス内の奇数値を持つセルの数になります。
これを解決するには、次の手順に従います-
- 奇数:=0、およびx:=行列の行数を初期化します
- マトリックスマットを作成する
- 0からxの範囲のiの場合
- r =input [i、0]、c =input [i、1]、
- 0からm–1の範囲のjの場合
- mat [r、j]:=mat [r、j] + 1
- 0からn–1の範囲のjの場合
- mat [j、c]:=mat [j、c] + 1
- 0からn–1の範囲のiの場合
- for j:=0からm– 1
- odd:=odd + mat [i、j]ビット単位または1で
- for 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
-
C++のスパイラルマトリックスIII
R行とC列の2次元グリッドがあるとすると、東向きの(r0、c0)から開始します。ここで、グリッドの北西の角は最初の行と列にあり、グリッドの南東の角は最後の行と列にあります。このグリッドのすべての位置を訪問するために、時計回りのスパイラル形状で歩きます。グリッドの境界の外側にいるときは、グリッドの外側を歩き続けます(ただし、後でグリッドの境界に戻る場合があります)。グリッドの位置を表す座標のリストを、訪問した順序で見つける必要があります。したがって、グリッドが-のような場合 次に、矢印がパスになります。 これを解決するには、次の手順に従います- dirrを作成:=[[0,1]、[
-
マトリックスがC++で反転可能かどうかを確認します
ここでは、行列が可逆であるかどうかを確認する方法を説明します。 1つの行列がMの場合、逆行列M-1は-になります。 $$ M ^ -1 =\ frac {adj(M)} {| M \ lvert} $$ したがって、Mの行列式がゼロ以外の場合は、逆数を取得できるのは私たちだけです。そうでない場合は、逆数を取得できません。したがって、ここでは、行列式がゼロ以外であるかどうかを確認する必要があります。行列式を見つけることは、再帰的なプロセスの1つです。部分行列を見つけ、その行列式を見つけ、その結果を最終的な計算に使用する必要があります。より良いアイデアを得るためにコードを見てみましょう。 例