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

Cの配列内の要素の最初と最後のインデックス間の最大差


サイズNの整数の配列が与えられます。配列はランダムな順序の整数で構成されます。タスクは、配列内の要素の最初と最後のインデックス間の最大の差を見つけることです。配列に2回現れる数を見つける必要があり、そのインデックス間の差は最大です。そのようなペアがさらにある場合は、インデックス間のそのような最大の差を格納します。

入力

Arr[] = { 2,1,3,1,3,2,5,5 }.

出力 −配列内の要素の最初と最後のインデックス間の最大差− 5

説明 −要素のペアとそれらのインデックス間の違いは次のとおりです-

(2,2) Arr[0] and Arr[5] 5-0=5 max difference till now is 5
(1,1) Arr[1] and Arr[3] 3-1=2 max difference till now is 5
(3,3) Arr[2] and Arr[4] 4-2=2 max difference till now is 5
(5,5) Arr[6] and Arr[7] 7-6=1 max difference till now is 5

入力

Arr[] = { 2,2,3,4,8,3,4,4,8,7 }.

出力 −配列内の要素の最初と最後のインデックス間の最大差− 4

説明 −要素のペアとそれらのインデックス間の違いは次のとおりです-

(2,2) Arr[0] and Arr[1] ; 1-0=1; max difference till now is 1
(3,3) Arr[2] and Arr[5] ; 5-2=3; max difference till now is 3
(4,4,4) Arr[3],Arr[6],Arr[7] ; 7-6=1,6-3=3,7-3=4; max difference till now is 4
(8,8) Arr[4] and Arr[8] ; 8-4=4 ; max difference till now is 4

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

  • ランダムな順序で繰り返される数値を含む整数の配列を宣言します。(Arr [])

  • 配列のサイズを格納する変数を作成します。 (N)

  • 関数maxDifference(int Arr []、int n)は、配列内の要素の最初と最後のインデックス間の最大差(maxD)を計算するために使用されます。

  • maxDifference()内で、maxDは、これまでに見つかった最大インデックスの差を格納するために使用されると宣言しました。

  • 最初の要素(インデックスi =0)から開始して、forループを使用して配列をトラバースします。

  • ネストされたforループでは、最後のインデックスに到達するまで残りの配列(j =i + 1)をトラバースします。

  • Arr [i]と同じ要素が見つかった場合は、そのインデックスi、j間の差を計算し、それがmaxDの以前の値より大きい場合は、maxDを更新します。

  • 両方のforループが終了するまでこれを続けます。

  • maxDに保存された結果を返します。

#include <stdio.h>
int maxDifference(int arr[],int n){
   int maxD=0;
   for(int i=0;i<n-1;i++){
      for(int j=i+1;j<n;j++){
         if(arr[i]==arr[j] && (j-i)>maxD)
            maxD=j-i;
      }
   }
   return maxD;
}
int main(){
   int Arr[] = {1, 4, 1, 3, 3, 5, 4, 5, 2};
   int N = sizeof(Arr) / sizeof(Arr[0]);
   printf("Maximum difference between first and last indexes of an element in array : %d" ,maxDifference(Arr, N);
   return 0;
}

出力

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

Maximum difference between first and last indexes of an element in array : 5

  1. ArrayBlockingQueueとArrayDequeの違い

    ArrayBlockingQueueは、FIFO順に要素を格納します。要素の挿入は常にキューの末尾で行われ、要素の削除は常にキューの先頭から行われました。スレッドセーフであり、制限付き配列キューであるため、一度作成すると容量を変更できません。これは、ブロッキングキューの実装です。 Javaドキュメントによる- Dequeインターフェースのサイズ変更可能な配列の実装。配列両端キューには容量制限はありません。それらは使用法をサポートするために必要に応じて成長します。それらはスレッドセーフではありません。外部同期がない場合、複数のスレッドによる同時アクセスはサポートされません。ヌル要素は禁止され

  2. Pythonでソートされた配列の要素の最初と最後の位置を見つける

    整数Aの配列があるとします。これは昇順で並べ替えられ、指定されたターゲット値の開始位置と終了位置を見つける必要があります。配列内にターゲットが見つからない場合は、[-1、-1]を返します。したがって、配列が[2,2,2,3,4,4,4,4,5,5,6]のようで、ターゲットが4の場合、出力は[4,7]になります。 これを解決するには、次の手順に従います- 最初はres:=[-1、-1]、low:=0、high:=配列Aの長さに設定 低い<高い 中:=低+(高–低)/ 2 A [mid]がターゲットの場合、 high:=mid、res [0]:=mid、res [1]:=mid そ