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
廣告