C語言中陣列中相同元素之間最大距離


給定一個整數陣列。陣列中包含多個相同元素。這裡的任務是找到陣列中任意兩個相同元素之間的最大距離。我們將從左到右拾取陣列中的每個元素。然後我們將找到相同數字的最後一次出現並存儲索引之間的差值。現在,如果此差值最大,則返回它。

輸入 

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

輸出 - 陣列中相同元素之間最大距離 - 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 }

輸出 - 陣列中相同元素之間最大距離 - 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) 用於計算相同元素之間最大距離。

  • 我們將變數 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

更新於: 2020-08-14

2K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告