题目描述
给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0..K],右部分A[K+1..N-1],K可以取值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少?
给定整数数组A和数组的大小n,请返回题目所求的答案。
测试样例:
[2,7,3,1,1],5
返回:6
class MaxGap {
public:
int abs(int i){
return i>0?i:-i;
}
int findMaxGap(vector<int> A, int n) {
// write code here
int max0 = A[0];
int *b = new int[n];
b[n - 1] = A[n - 1];
for (int i = n - 2; i >= 0; i--) {
b[i] = A[i] > b[i + 1] ? A[i] : b[i + 1];
}
int maxGap = 0;
for (int k = 0; k < n - 1; k++) {
if(A[k]>max0) max0=A[k];
int gap = abs(max0 - b[k + 1]);
if(gap>maxGap) maxGap=gap;
}
delete [] b;
return maxGap;
}
};