C語言中查詢兩個元素的最大差值,其中較大元素出現在較小元素之後


給定一個大小為N的整數陣列。陣列包含隨機順序的整數。任務是找到兩個元素之間的最大差值,使得較大元素出現在較小數字之後。也就是說,Arr[j]-Arr[i]最大,其中j>i。

輸入 

Arr[] = { 2,1,3,8,3,19,21}.

輸出 − 兩個元素之間的最大差值,其中較大元素出現在較小元素之後 − 20

解釋 − 最大差值在21和1之間,21出現在陣列中1之後。

輸入 

Arr[] = {18, 2,8,1,2,3,2,6 }.

輸出 − 兩個元素之間的最大差值,其中較大元素出現在較小元素之後 − 6

解釋 − 最大差值在8和2之間,8出現在陣列中2之後。

下面程式中使用的演算法如下

  • 宣告一個包含矩形兩邊的整數陣列。(Arr[])

  • 建立一個變數來儲存陣列的大小。(n)

  • maxArea(int arr[],int n)函式用於計算矩形的最大面積。它以輸入陣列及其大小作為引數。

  • 在maxArea()中,我們聲明瞭一個Dim[2]陣列,用於儲存在遍歷排序後的陣列(降序)arr[]後找到的兩個最高邊。

  • 由於arr[]按降序排序,因此最高的4條邊必須位於開頭。我們將迭代arr[],以便找到一對邊。

  • 首先用0初始化Dim[]。

  • 在while迴圈內,我們設定條件,直到j<2,表示尚未找到dim[0]和dim[1]的值,或者到達arr[]的末尾。(i<n)。

  • 如果找到這樣的一對邊,(if(arr[i]==arr[i+1]) ),則將其儲存在dim[j]中,併為下一條邊遞增j。

  • 將結果作為dim[0]和dim[1]的乘積返回。

  • 注意 − sort(arr,n)應該將arr按降序排序。

示例

 線上演示

#include <stdio.h>
int maxDiff(int arr[], int n){
   // Maximum difference found so far
   int MD = arr[1] - arr[0];
   // Minimum number visited so far
   int min = arr[0];
   for(int i = 1; i < n; i++){
      if (arr[i] - min > MD)
         MD = arr[i] - min;
      if (arr[i] < min)
         min = arr[i];
   }
   return MD;
}
/* Driver program to test above function */
int main(){
   int arr[] = {2,5,7,3,4,12};
   int n=6;
   // Function calling
   printf("Maximum difference is : %d ",maxDiff(arr, n));
   return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

The maximum difference between two elements such that the larger element appears after the smaller number : 10

更新於:2020年8月14日

1K+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告