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