首页 > 代码库 > 动态规划经典问题03:数组中最大的数对差(或最小的数对差)
动态规划经典问题03:数组中最大的数对差(或最小的数对差)
题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。
参考:http://zhedahht.blog.163.com/blog/static/2541117420116135376632/
讨论区:http://stackoverflow.com/questions/11858790/find-the-largest-possible-difference-in-an-array-with-the-smaller-integer-occuri
【分析】自顶向下分析,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; } }
动态规划经典问题03:数组中最大的数对差(或最小的数对差)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。