C++で最長の乱流サブアレイ
AのサブアレイA[i]、A [i + 1]、...、A [j]は、これらの条件を満たすときに乱流であると言われます-
したがって、サブアレイ内の隣接する要素の各ペア間で比較記号が反転する場合、サブアレイは乱流になります。ここで、Aの最大サイズの乱流サブアレイの長さを求めます。したがって、入力が[9,4,2,10,7,8,8,1,9]の場合、出力は5になります。これはA[1]が原因です。> A [2] A [4]
-
n:=配列Aのサイズ
-
prevBig:=1、prevSmall:=1、currBig:=1、currSmall:=1およびret:=1
-
1からn–1の範囲のiの場合
-
A [i]> A [i – 1]の場合、currBig:=1 + prevSmall
-
ret:=ret、currBig、currSmallの最大値
-
prevSmall:=currSmall、prevBig:=currBig、currSmall:=1、currBig:=1
-
-
retを返す
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: int maxTurbulenceSize(vector<int>& A) { int n = A.size(); int prevBig = 1; int prevSmall = 1; int currBig = 1; int currSmall = 1; int ret = 1; for(int i = 1; i < n; i++){ if(A[i] > A[i - 1]){ currBig = 1 + prevSmall; } if(A[i] < A[i - 1]){ currSmall = 1 + prevBig; } ret = max({ret, currBig, currSmall}); prevSmall = currSmall; prevBig = currBig; currSmall = 1; currBig = 1; } return ret; } }; main(){ vector<int> v1 = {9,4,2,10,7,8,8,1,9}; Solution ob; cout << (ob.maxTurbulenceSize(v1)); }
入力
[9,4,2,10,7,8,8,1,9]
出力
5
-
C++でのサブアレイのXORクエリ
正の整数の配列arrと、querys [i] =[Li、Ri]の配列クエリがあるとします。各クエリについて、iはLiからRiまでの要素のXORを計算します。 (つまり、arr [Li] XOR arr [Li + 1] xor ... xor arr [Ri])。指定されたクエリの結果を含む配列を見つける必要があります。したがって、入力が− [1,3,4,8]のようであり、クエリが[[0,1]、[1,2]、[0,3]、[3,3]]のようである場合、結果は[2,7,14,8]になります。これは、配列内の要素のバイナリ表現が-1 =0001、3 =0011、4 =0100、および8 =1000であ
-
C++でのサブアレイの最小値の合計
整数Aの配列があるとします。min(B)の合計を見つける必要があります。ここで、BはAのすべての(連続した)サブ配列にまたがっています。大きい場合は、モジュロ10 ^ 9 + 7で答えを返します。したがって、入力が[3,1,2,4]の場合、サブ配列は[3]、[1]、[であるため、出力は17になります。 2]、[4]、[3,1]、[1,2]、[2,4]、[3,1,2]、[1,2,4]、[3,1,2,4] 、したがって、最小値は[3,1,2,4,1,1,2,1,1,1]であり、合計は17です。 これを解決するには、次の手順に従います- m:=1 x 10 ^ 9 + 7 2つのメソ