C++で連続する要素が1だけ異なるサブ配列をカウントします
整数を含む配列arr[]が与えられます。目標は、arr []のすべてのサブ配列をカウントして、各サブ配列の連続する要素が1だけ異なるようにすることです。配列が[1,2,3]の場合、サブ配列は[1,2]、[2,3]、[1,2,3]のみになります。
例を挙げて理解しましょう。
入力 − arr [] ={4,3,2,1};
出力 −連続する要素が1だけ異なるサブアレイの数は− 6
説明 − Subaaraysは−
[4,3], [3,2], [2,1], [4,3,2], [3,2,1], [4,3,2,1]. Total 6.
入力 − arr [] ={1,5,6,7,9,11};
出力 −連続する要素が1だけ異なるサブアレイの数は− 3
説明 − Subaaraysは−
[5,6], [6,7], [5,6,7]. Total 3
以下のプログラムで使用されているアプローチは次のとおりです
forループを使用して配列をトラバースします。 i=0からi
数字の配列arr[]を取ります。
関数sub_ele_diff_one(int arr []、int size)は配列を受け取り、連続する要素が1だけ異なるサブ配列の数を返します。
初期カウントを0とします。
i=0からI
最初に2つの変数を取り、最後にすべての要素が連続していて1だけ異なるインデックスの場合は0とします。
arr [i-1] -arr[i]==1またはarr[i]-arr [i-1]==1かどうかを確認します。 (要素は1つ異なります)。 trueの場合、最初にインクリメントします。
前の条件がfalseの場合、この条件を満たす配列内の要素の合計はtemp =first-last+1です。可能なサブ配列はtotal=temp *(temp-1)/2です。
次に、このサブアレイカウントの合計をカウントに追加します。
インデックスを最初と最後に現在のI(連続要素条件が失敗するインデックス)で更新します。
最初の場合はforループの最後に!=最後。これは、残りの配列が条件を満たすことを意味します。同じ手順を適用し、合計をカウントに追加します。
両方のループの終わりに、結果としてカウントを返します。
上記のコードを実行すると、次の出力が生成されます-
例
#include <iostream>
using namespace std;
int sub_ele_diff_one(int arr[], int size){
int count = 0, first = 0, last = 0;
for (int i = 1; i < size; i++){
if (arr[i] - arr[i - 1] == 1 || arr[i-1] - arr[i] == 1){
first++;
}
else{
int temp = first - last + 1;
int total = temp * (temp - 1) / 2;
count = count + total;
first = i;
last = i;
}
}
if (first != last){
int temp = first - last + 1;
int total = temp * (temp - 1) / 2;
count = count + total;
}
return count;
}
int main(){
int arr[] = { 1, 2, 4, 3 };
int size = sizeof(arr) / sizeof(arr[0]);
cout<<"Count of Subarrays with Consecutive elements differing by 1 are: "<<sub_ele_diff_one(arr, size);
return 0;
}
出力
Count of Subarrays with Consecutive elements differing by 1 are: 2
-
C++でbよりも大きいプレフィックス
この問題では、strをn回追加することによって文字列が作成されるように、aとbおよび整数Nのみを含む文字列strが与えられます。私たちのタスクは、aの数がbの数よりも多い部分文字列の総数を出力することです。 問題を理解するために例を見てみましょう Input: aab 2 Output: 9 Explanation: created string is aabaab. Substrings with count(a) > count(b) : ‘a’ , ‘aa’, ‘aab’, ‘aaba&rsquo
-
C ++のプライム周波数を持つ配列要素?
配列 同じデータ型の要素のコンテナです。 プライム周波数 配列の要素の出現回数が素数であることを意味します。 したがって、これらの定義に基づいて、プライム周波数を持つ配列要素を見つける問題があります。配列の文字列が与えられます。文字の頻度を見つけて、頻度が素数であるかどうかを確認してから、素数の頻度を持つ要素を数える必要があります。 例を見てみましょう Input: str = “helloworld” Output: 2 説明 文字の出現回数は- h -> 1 e -> 1 l -> 3 o -> 2 w-> 1 r ->