与えられた行列がC++で同じ値のk×kの2乗を持つkを見つけるプログラム
2d行列があるとすると、すべての要素に同じ値が含まれている最大のk×k部分行列を見つけてから、kの値を見つける必要があります。
したがって、入力が次のような場合
| 1 | 1 | 8 | 3 |
| 1 | 5 | 5 | 5 |
| 2 | 5 | 5 | 5 |
| 4 | 5 | 5 | 5 |
値5の3×3の正方行列があるため、出力は3になります。
これを解決するには、次の手順に従います-
-
n:=行列の行数
-
m:=行列の列数
-
サイズ(n x m)の2D配列dpを1つ定義し、1で埋めます
-
ret:=1
-
初期化i:=n --1の場合、i> =0の場合、更新(iを1つ減らす)、実行-
-
初期化j:=m -1の場合、j> =0の場合、更新(jを1つ減らす)、実行-
-
val:=inf
-
i +1
-
val:=最小のdp [i + 1、j]およびval
-
-
それ以外の場合
-
val:=0
-
-
j + 1
-
val:=最小のdp [i、j+1]およびval
-
-
それ以外の場合
-
val:=0
-
-
i +1
-
val:=最小のdp [i + 1、j+1]およびval
-
-
それ以外の場合
-
val:=0
-
-
valがinfと同じ場合、-
-
次の部分を無視し、次の反復にスキップします
-
-
dp [i、j]:=dp [i、j] + val
-
ret:=retとdp[i、j]
の最大値
-
-
-
-
retを返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int solve(vector<vector<int>>& v) {
int n = v.size();
int m = v[0].size();
vector<vector<int>> dp(n, vector<int>(m, 1));
int ret = 1;
for (int i = n - 1; i >= 0; i--) {
for (int j = m - 1; j >= 0; j--) {
int val = INT_MAX;
if (i + 1 < n && v[i + 1][j] == v[i][j]) {
val = min(dp[i + 1][j], val);
}
else {
val = 0;
}
if (j + 1 < m && v[i][j + 1] == v[i][j]) {
val = min(dp[i][j + 1], val);
}
else {
val = 0;
}
if (i + 1 < n && j + 1 < m && v[i + 1][j + 1] == v[i][j]) {
val = min(dp[i + 1][j + 1], val);
}
else {
val = 0;
}
if (val == INT_MAX)
continue;
dp[i][j] += val;
ret = max(ret, dp[i][j]);
}
}
return ret;
}
};
int solve(vector<vector<int>>& matrix) {
return (new Solution())->solve(matrix);
}
int main(){
vector<vector<int>> matrix = {
{1, 1, 8, 3},
{1, 5, 5, 5},
{2, 5, 5, 5},
{4, 5, 5, 5}
};
cout << solve(matrix);
} 入力
{ {1, 1, 8, 3}, {1, 5, 5, 5}, {2, 5, 5, 5}, {4, 5, 5,
5} }; 出力
3
-
Pythonの特定の行列で1の最大の正方形の領域を見つけるプログラム
バイナリ行列があるとすると、その与えられた行列で1の最大の2乗を見つける必要があります。 したがって、入力が次のような場合 1 0 0 0 0 1 1 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 その場合、出力は16
-
Pythonで指定されたマトリックス内または非中のターゲット値を見つけるプログラム
各行と列が降順ではない順序で並べ替えられている2Dマトリックスがあるとすると、指定されたターゲットがその中に存在するかどうかを確認する必要があります。 したがって、入力が次のような場合 2 4 30 3 4 31 6 6 32 そしてtarget=31の場合、出力はTrueになります これを解決するには、次の手順に従います- col:=マトリックスの列サイズ-1 行列の0から行サイズの範囲のiの場合、 =0の場合、do col:=col-1 matrix [i、col]がターゲットと同じ場合、 Trueを返す