// 数对之差的最小值.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "string.h"
#define max(a, b) (a > b? a : b)
#define min(a, b) (a < b? a : b)
int findMaxDiff(int *pArray, int len);
int error = 0;
int _tmain(int argc, _TCHAR* argv[])
{
int array[8] = {2, 4, 1, 16, 7, 5, 11, 9};
int maxDiff = 0;
maxDiff = findMaxDiff(array, 8);
printf("max difference is %d\n", maxDiff);
return 0;
}
int findMaxDiff(int* pArray, int len)
{
if ((pArray == NULL) || (len < 1))
{
error = 1;
return 0;
}
int ret;
int curMin = pArray[0];
int curMax = pArray[0];
for (int idx = 1; idx < len; ++idx)
{
curMin = min(curMin, pArray[idx]);
curMax = max(curMax, pArray[idx]);
}
return curMax-curMin;
}
另外这道题有一种 log(N)的解法
// 求数组的最大值和最小值,返回值在maxValue和minValue
void MaxandMin(int *a, int l, int r, int& maxValue, int& minValue)
{
if(l == r) // l与r之间只有一个元素
{
maxValue = a[l] ;
minValue = a[l] ;
return ;
}
if(l + 1 == r) // l与r之间只有两个元素
{
if(a[l] >= a[r])
{
maxValue = a[l] ;
minValue = a[r] ;
}
else
{
maxValue = a[r] ;
minValue = a[l] ;
}
return ;
}
int m = (l + r) / 2 ; // 求中点
int lmax ; // 左半部份最大值
int lmin ; // 左半部份最小值
MaxandMin(a, l, m, lmax, lmin) ; // 递归计算左半部份
int rmax ; // 右半部份最大值
int rmin ; // 右半部份最小值
MaxandMin(a, m + 1, r, rmax, rmin) ; // 递归计算右半部份
maxValue = max(lmax, rmax) ; // 总的最大值
minValue = min(lmin, rmin) ; // 总的最小值
}