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

C++でのMaxConsecutiveOnes II


バイナリ配列があるとします。最大で1つの0を反転できる場合は、この配列で連続する1の最大数を見つける必要があります。

したがって、入力が[1,0,1,1,0]の場合、最初のゼロを反転すると連続する1の最大数が得られるため、出力は4になります。反転後、連続する1の最大数は4です。

これを解決するには、次の手順に従います-

  • ret:=1、n:=numsのサイズ

  • nがゼロ以外の場合、-

    • 0を返す

  • j:=0、ゼロ:=0

  • 初期化i:=0の場合、i

    • nums [i]が0と同じ場合、-

      • (ゼロを1つ増やします)

    • while(j <=i and zero> 1)、do −

      • nums [j]が0と同じ場合、-

        • (ゼロを1つ減らします)

      • (jを1増やします)

    • ret:=retの最大値と(i --j + 1)

  • retを返す

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int findMaxConsecutiveOnes(vector<int<& nums) {
      int ret = 1;
      int n = nums.size();
      if (!n)
         return 0;
      int j = 0;
      int zero = 0;
      for (int i = 0; i < n; i++) {
         if (nums[i] == 0) {
            zero++;
         }
         while (j <= i && zero > 1) {
            if (nums[j] == 0) {
               zero--;
            }
            j++;
         }
         ret = max(ret, i - j + 1);
      }
      return ret;
   }
};
main(){
   Solution ob;
   vector<int< v = {1,0,1,1,1,0,1,1};
   cout << (ob.findMaxConsecutiveOnes(v));
}

入力

{1,0,1,1,1,0,1,1}

出力

6

  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++プログラム

    バイナリヒープは、最小ヒープまたは最大ヒープのいずれかである完全なバイナリツリーです。最大バイナリヒープでは、ルートのキーは、バイナリヒープに存在するすべてのキーの中で最大である必要があります。このプロパティは、バイナリツリーのすべてのノードに対して再帰的に真である必要があります。最小バイナリヒープはMinHeapに似ています。 アルゴリズム max_heapの場合: Begin    Declare function max_heap ()       Declare j, t of the integer datatype. &nbs