C++でのMaxConsecutiveOnes III
0と1の配列Aがあるとすると、0から1までの最大K個の値を更新できます。1のみを含む最長の(連続した)サブ配列の長さを見つける必要があります。したがって、A=[1,1,1,0,0,0,1,1,1,1,0]およびk=2の場合、出力は6になります。したがって、2 0を反転すると、配列は次のようになります。 [1,1,1,0,0,1,1,1,1,1,1]のように、1の最長シーケンスの長さは6です。
これを解決するには、次の手順に従います-
- ans:=0、j:=0、n:=配列のサイズを設定
- 0からn–1の範囲のiの場合
- A [i]が0の場合、kを1減らします
- while j<=iおよびk<0
- A [j] =0の場合、kを1増やします
- jを1増やします
- ans:=最大i – j + 1、ans
- 回答を返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: int longestOnes(vector<int>& A, int k) { int ans = 0; int j = 0; int n = A.size(); for(int i = 0; i < n; i++){ if(A[i] == 0) k--; while(j <= i && k <0){ if(A[j] == 0){ k++; } j++; } ans = max(i - j + 1, ans); } return ans; } }; main(){ vector<int> v = {1,1,1,0,0,0,1,1,1,1,0}; Solution ob; cout <<(ob.longestOnes(v, 3)); }
入力
[1,1,1,0,0,0,1,1,1,1,0] 3
出力
10
-
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の場合、
-
C++のスパイラルマトリックスIII
R行とC列の2次元グリッドがあるとすると、東向きの(r0、c0)から開始します。ここで、グリッドの北西の角は最初の行と列にあり、グリッドの南東の角は最後の行と列にあります。このグリッドのすべての位置を訪問するために、時計回りのスパイラル形状で歩きます。グリッドの境界の外側にいるときは、グリッドの外側を歩き続けます(ただし、後でグリッドの境界に戻る場合があります)。グリッドの位置を表す座標のリストを、訪問した順序で見つける必要があります。したがって、グリッドが-のような場合 次に、矢印がパスになります。 これを解決するには、次の手順に従います- dirrを作成:=[[0,1]、[