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+ 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告