题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。
1.利用分治法求解
//利用分治法
#include <algorithm>
int maxNumberDifference(int* array, int length) {
if (NULL == array || length < 2) {
return 0x80000000;
}
int max = 0, min = 0;
return numberDifference(array, array + length - 1, max, min);
}
//利用递归求解数对之差的最大值
int numberDifference(int* start, int* end, int &max, int &min) {
if (start == end) {
max = min = *start;
return 0x80000000;
}
//从中间位置将序列分为两组
int* middle = start + (end - start) >> 1;
//最大值最小值均在左半区域时
int leftMax = 0, leftMin = 0;
int leftDiff = numberDifference(start, middle, leftMax, leftMin);
//最大值最小值均在右半区域时
int rightMax = 0, rightMin = 0;
int rightDiff = numberDifference(middle + 1, end, rightMax, rightMin);
//找出当