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

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

  1. 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

  2. C ++のプライム周波数を持つ配列要素?

    配列 同じデータ型の要素のコンテナです。 プライム周波数 配列の要素の出現回数が素数であることを意味します。 したがって、これらの定義に基づいて、プライム周波数を持つ配列要素を見つける問題があります。配列の文字列が与えられます。文字の頻度を見つけて、頻度が素数であるかどうかを確認してから、素数の頻度を持つ要素を数える必要があります。 例を見てみましょう Input: str = “helloworld” Output: 2 説明 文字の出現回数は- h -> 1 e -> 1 l -> 3 o -> 2 w-> 1 r ->