题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。
参考:http://zhedahht.blog.163.com/blog/static/2541117420116135376632/
【分析】自顶向下分析,diff[i]记录0~i的最大数对之差,max[i]记录0~i的最大数,则状态递归方程为:
diff[i+1]=Math.max(max[i]-array[i+1],diff[i] )
自底向上分析, 初试max[1]=2,diff[1]=2-4=-2。max[2]=4,diff[2]=Max(4-1,diff[1])=3。max[3]=4,diff[3]=Max(4-16,diff[2])=3。……
算法复杂度为O(n)。
/** * 创建时间:2014年9月5日 下午5:27:46 * 项目名称:Test * @author Cao Yanfeng * @since JDK 1.6.0_21 * 类说明: 动态规划解数组中的最大数对差 */ public class MaxDiffofArray { /** * @paramargs */ public static void main(String[] args) { // TODO Auto-generated method stub int[] array={1,15,2,5,0,-1}; System.out.println(getMaxDiff(array)); } public static int getMaxDiff(int[] array) { int length=array.length; if (length==1) { return-999; } if (length==2) { return array[2]-array[1]; } int max=array[0]; int maxDiff=max-array[1]; for (int i = 2; i < length; i++) { if (array[1]>max) { max=array[i-1]; } int currentDif=max-array[i]; if (currentDif>maxDiff) { maxDiff=currentDif; } } return maxDiff; } }
原文地址:http://blog.csdn.net/brillianteagle/article/details/39118551