题目:
给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0..K],右部分A[K+1..N-1],K可以取值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少?
给定整数数组A和数组的大小n,请返回题目所求的答案。
测试样例:
[2,7,3,1,1],5
返回:6
分析:
本题的要求是“数组左边部分的最大值减去右边部分的最大值,其结果的绝大值最大是多少?”。先对特殊情况进行处理:数组长度为0或者数组长度为1;然后再满足数组长度 >= 2 的条件下分析,首先左右两个最大值中必定有一个是整个数组的最大值,先求出该最大值;要使两部分的差值最大,那么就要让另外一边的最大值尽可能小;数组最大值的位置共有三种情况:左边、右边、中间,如果最大值在左边部分,那么对于其右边的数组有多种分法,每种分法都包含数组最后一个元素A[n-1],右半边去最有段的元素,得出的差值最大;如果最大值在右半部分,左边取最左边的元素,得出的差值最大;只需要用数组的最大值减两部分最大值较小的就可得出结果;另外,如果最大值在中间,则比较A[i]-A[0]和A[i]-A[n-1]的大小,取差值最大的。
import java.util.*;
public class MaxGap {
public int findMaxGap(int[] A, int n) {
if(A == null || n == 0){
return -1;
}
//如果数组长度为1,返回值为0
if(n == 1){