C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. 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の場合、

  2. C++のスパイラルマトリックスIII

    R行とC列の2次元グリッドがあるとすると、東向きの(r0、c0)から開始します。ここで、グリッドの北西の角は最初の行と列にあり、グリッドの南東の角は最後の行と列にあります。このグリッドのすべての位置を訪問するために、時計回りのスパイラル形状で歩きます。グリッドの境界の外側にいるときは、グリッドの外側を歩き続けます(ただし、後でグリッドの境界に戻る場合があります)。グリッドの位置を表す座標のリストを、訪問した順序で見つける必要があります。したがって、グリッドが-のような場合 次に、矢印がパスになります。 これを解決するには、次の手順に従います- dirrを作成:=[[0,1]、[