C++でKより大きくない長方形の最大合計
2D行列と整数kがあるとします。合計がkを超えないように、行列内の長方形の最大合計を見つける必要があります。したがって、入力が-
のような場合1 | 0 | 1 |
0 | -3 | 2 |
また、k =3の場合、マークされた長方形の合計は3であるため、出力は3になります。
これを解決するには、次の手順に従います-
- 関数maxSumSubmatrix()を定義します。これには、1つの2D配列行列とkが必要です。
- n:=行番号、m:=列番号
- ans:=-inf
- 初期化l:=0の場合、l
- サイズnの配列rowSumを定義します
- rを初期化する場合:=l、r
- iを初期化する場合:=0、i
- rowSum [i]:=rowSum [i] + matrix [i、r]
- ans:=ansの最大値と(currSum-it)
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: int maxSumSubmatrix(vector<vector<int>>& matrix, int k) { int n = matrix.size(); int m = matrix[0].size(); int ans = INT_MIN; for(int l = 0; l < m; l++){ vector <int> rowSum(n); for(int r = l; r < m; r++){ for(int i = 0; i < n; i++)rowSum[i] += matrix[i][r]; set < int > s; s.insert(0); int currSum = 0; for(int i = 0; i < n; i++){ currSum += rowSum[i]; set <int> :: iterator it = s.lower_bound(currSum - k); if(it != s.end()){ ans = max(ans, (currSum - *it)); } s.insert(currSum); } } } return ans; } }; main(){ Solution ob; vector<vector<int>> v = {{1,0,1},{0,-3,2}}; cout << (ob.maxSumSubmatrix(v, 3)); }
入力
[{1,0,1},{0,-3,2}] 3
出力
3
-
C++の長方形エリアII
(軸に沿った)長方形のリストがあるとします。ここで、各rectangle [i] ={x1、y1、x2、y2}です。ここで、(x1、y1)は左下隅のポイントであり、(x2、y2)は右上隅のポイントです。 i番目の長方形。 平面内のすべての長方形でカバーされる総面積を見つける必要があります。答えは非常に大きい可能性があるため、モジュロ10 ^ 9+7を使用できます。 したがって、入力が次のような場合 その場合、出力は6になります。 これを解決するには、次の手順に従います- m =10 ^ 9 + 7 関数add()を定義します。これには、a、b、が必要です。 r
-
C++でのライン上の最大ポイント
2D平面があるとします。同じ直線上にある点の最大数を見つける必要があります。したがって、ポイントが次のような場合- それから4つのポイントがあります これを解決するには、次の手順に従います- n:=ポイントの数、n <3の場合、nを返します ans:=2 1からn–1の範囲のiの場合 カウント:=0 インデックスiとi– 1から2つのポイントを取ります。これらは、p1、p2です。 p1ポイントとp2ポイントが同じ場合、 0からn–1の範囲のjの場合 points [j] .x=p1.xおよびpoints[j].y =p1.yの場合、