数组左边减去右边数值的最大差值

题目:

   给定一个整数数组,a[1],a[2],...,a[n],每一个元素a[i]可以和它右边的(a[i+1],a[i+2],...,a[n])元素做差,求这个数组中最大的差值,例如a={0,3,9,1,3,5}这个数组最大的差值就是9-1=8;

思路1 : 穷举

   简单的是穷举法,复杂度是O(n^2)。

思路2 :

    求a[i]与之右边的元素的差的最大值,相当于求(a[i+1],a[i+2],...,a[n])中元素的最小值,于是便有了从数组最后边元素开始遍历,记录下最小值元素,然后求差的想法,复杂度为O(n)

实例代码

int getMax( int array[], int len )
{
	int min = array[len-1];
	int maxSub = array[len-2] - min;
	int diff;
	for ( int i=len-3; i>=0; --i ) {
		if ( array[i+1] < min ) 
			min = array[i+1]; // 更新最小值
		diff = array[i] - min;
		if ( diff > maxSub )
			maxSub = diff;
	}
	return maxSub;
}



你可能感兴趣的:(程序设计)