最大差值问题

来源:互联网 发布:淘宝时尚女装广告语 编辑:程序博客网 时间:2024/04/30 11:33

题目:有一个长为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>


0 0