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