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

Cの配列内の同じ要素の2つのオカレンス間の最大距離


整数の配列が与えられます。配列には、同じ要素が複数回出現します。ここでのタスクは、配列の任意の2つの同じ要素間の最大距離を見つけることです。左から順に配列から各要素を選択します。次に、同じ番号の最後の出現を見つけて、インデックス間の差を保存します。ここで、この差が最大の場合は、それを返します。

入力

Arr[] = { 1,2,4,1,3,4,2,5,6,5 }

出力 −配列内の同じ要素の2つのオカレンス間の最大距離− 4

説明 −インデックス付きの繰り返し番号-

1. 1, first index 0, last index 3 distance=3-0-1=2
2. 2, first index 1, last index 6 distance=6-1-1=4
3. 5, first index 7, last index 9 distance=9-7-1=1
Maximum distance between two occurrences of same element : 4

入力

Arr[] = { 10,20,1,10,10,21,12,0 }

出力 −配列内の同じ要素の2つのオカレンス間の最大距離− 3

説明 −インデックス付きの繰り返し番号-

1. 10 first index 0, last index 4 distance=4-0-1=3
Maximum distance between two occurrences of same element : 3

注-入力配列に繰り返し番号がない場合は、-1を返します

以下のプログラムで使用されているアプローチは次のとおりです

  • 繰り返し数を持つ整数配列をArr[]

    とします。
  • 関数maxDistance(int arr []、int n)は、同じ要素の2つのオカレンス間の最大距離を計算するために使用されます。

  • 変数maxDを-1で初期化します。

  • forループ内では、整数の配列を最初からトラバースします。

  • ネストされたforループでは、残りの要素をトラバースし、繰り返しがある場合はそれを検索します。 (if(arr [i] ==arr [j])。

  • それが真である場合は、インデックスを差し引いて数値間の差を計算します。 (temp =j-i-1)

  • この値がこれまでに見つかった最大値である場合は、maxDに保存します

  • 配列全体をトラバースした後、maxDを返します。

#include <stdio.h>
#include <math.h>
int maxDistance(int arr[],int n){
   int size = n;
   int maxD = -1;
   for (int i = 0; i < n - 1; i++)
      for (int j = i + 1; j < n; j++)
         if (arr[i] == arr[j]){
            int temp=abs(j-i-1);
            maxD = maxD>temp?maxD:temp;
         }
   return maxD;
}
// Driver code
int main(){
   int Arr[] = {1,2,4,1,3,4,2,5,6,5};
   printf("Maximum distance between two occurrences of same element in array:%d", maxDistance(Arr,10) );
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Maximum distance between two occurrences of same element in array − 4

  1. C++で任意の都市と駅の間の最大距離を見つける

    コンセプト 0からN-1までの番号が付けられたNの都市の数と、駅が配置されている都市に関して、私たちのタスクは、任意の都市とその最寄りの駅との間の最大距離を決定することです。駅のある都市は任意の順序で指定できることに注意してください。 入力 numOfCities = 6, stations = [2, 4] 出力 2 入力 numOfCities = 6, stations = [4] 出力 4 次の図は、6つの都市と、駅が緑色で強調表示されている都市を含む最初の例を示しています。したがって、この場合、最も近い駅からの最も遠い距離は2の距離で0です。したがって、最大距離は1です。

  2. C++のBSTの2つのノード間の最大要素

    問題の説明 N個の要素の配列と、指定された配列に属する2つの整数A、Bが与えられます。 arr[0]からarr[n-1]に要素を挿入して、二分探索木を作成します。タスクは、AからBへのパスで最大の要素を見つけることです。 例 配列が{24、23、15、36、19、41、25、35}の場合、次のようにBSTを形成できます- A=19およびB=41とすると、これら2つのノード間の最大要素は41です。 アルゴリズム ノードAおよびBの最も低い共通祖先(LCA)を見つけます。 LCAとAの間の最大ノードを見つけます。これをmax1と呼びましょう LCAとBの間の最大ノードを見つけます。こ