两个元素之间的最大差,使得较大的元素出现在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){
   //到目前为止找到的最大差异
   int MD = arr[1] - arr[0];
   //到目前为止访问的最小人数
   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;
   //函数调用
   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