相鄰最大差值
阿新 • • 發佈:2018-11-09
請設計一個複雜度為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; }