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