题目:有一个长为n的数组A,求满足0≤a≤b<n的A[b]-A[a]的最大值。
给定数组A及它的大小n,请返回最大差值。
测试样例:
[10,5],2
返回:0
解题思路: 因为b>=a所以两者的差为,后者减前者,先遍历一次将两者的差保存下来得到n-1个值,然后将这n-1个值找到连续和最大的连续子序列就为两者最大的差值,若连续子序列和最大为负数则两者最大差值为0
求解最大连续子序列和问题 可以用动态规划进行O(n),也可以递归求解O(nlogn),也可以暴力破解O(n^2)(参考http://www.tuicool.com/articles/NfmyIf)
/*** * 获取集合A的最大差值 * @param A * @param n 集合的长度 * @return */ int getDis(int[] A, int n) { // write code here int i = 0; int B[] = new int[n-1]; for(;i < n-1; i++){ B[i]= A[i+1]-A[i]; } if(maxSubsequence(B,n-1) < 0){ return 0; }else{ return maxSubsequence(B,n-1); } } /** * 动态规划求解最大连续子序列和 * @param A * @param length * @return */ public int maxSubsequence(int A[],int length){ int maxSum = 0;//记录最大的子序列和 int tmpSum=0;//临时最大子序列和 for(int i = 0; i < length; i++){ tmpSum += A[i]; if (tmpSum > maxSum) { maxSum = tmpSum; }else if(tmpSum < 0){//小于0则可以直接抛弃 tmpSum = 0; } } return maxSum; }
<span style="color: rgb(102, 102, 102); font-family: Arial; font-size: 14px; line-height: 24px; text-indent: 28px;">spark,hadoop交流群,群QQ号:521066396,欢迎加入共同学习,一起进步~</span>