相邻最大差值

请设计一个复杂度为O(n)的算法,计算一个未排序数组中排序后相邻元素的最大差值。给定一个整数数组A和数组的大小n,请返回最大差值。保证数组元素个数大于等于2小于等于500。

测试样例:[9,3,1,10],4

返回:6

 

方法一:数组下标法

 

解析:根据题意,我们可以先定义一个一维数组存储数据,然后通过sort进行由小到大排序,再通过for语句两两算出差值,并将其存储到新的一维数组中,最后将存储差值的数组利用sort进行由小到大排序,所得的最后一个元素就是要求解的最大差值。

 

代码:

#include<iostream>

#include<algorithm>

using namespace std;



int main()

{

       int n,solve;

       cin>>n;

       int a[n],b[n-1];

       for(int i=0;i<n;i++)

              cin>>a[i];

       sort(a,a+n);

       for(int i=0;i<n;i++)

              b[i]=a[i+1]-a[i];

       sort(b,b+n-1);

       cout<<b[n-1]<<endl;

       return 0;

}

方法二:最大初值法

 

解析:根据题意,我们可以定义一个一维数组的容器存储数据,调用findMaxDivision函数,即先将数据由小到大排序,因排序后后一项减前一项大于等于0则定义一个变量初始化为0,然后用for语句循环,利用if语句判断差值是否大于给定的变量,如果大于则赋值给变量,由此找到最大的差值,从而输出其值。

 

代码:

#include<iostream>

#include<vector>

#include<algorithm>

using namespace std;



int findMaxDivision(vector<int> A, int n)

{

       sort(A.begin(),A.end());

       int max=0;

       for(int i=1;i<n;i++)

              if(max<A[i]-A[i-1])

                     max=A[i]-A[i-1];

       return max;

}



int main()

{

       vector<int> a;

       int n,temp;

       cin>>n;

       for(int i=0;i<n;i++)

       {

              cin>>temp;

              a.push_back(temp);

       }

       cout<<findMaxDivision(a,n)<<endl;

       return 0;

}

猜你喜欢

转载自blog.csdn.net/qq_41943578/article/details/81590530