每天一道算法题12

给定一个数组arr,长度为N,你可以把任意长度大于0且小于N的前缀作为左部分,剩下的作为右部分。
但是每种划分下都有左部分的最大值和右部分的最大值,请返回最大的,左部分最大值减去右部分最大值的绝对值。

解答:这道题咋看很难,其实很骚,哈哈哈。找到整个数组的最大值,然后减去最左边的,和减去最右边的比较,谁大谁就是答案。
因为再怎么分割,无外乎两种情况,一是最大值分割在了左边,那么此时包含了最右边的最大值一定大于等于最右边数。一种是最大值分割
在了右边,那么此时包含了最左边的区域的最大值一定是大于等于最左边数,所以两者分割情况一比较,较大的就是答案

public static int dividerMax(int[] arr) {
    if (arr == null || arr.length == 0) {
        return 0;
    }
    int max = Integer.MIN_VALUE;
    for (int i = 0; i < arr.length; i++) {
        max = Math.max(max,arr[i]);
    }
    return Math.max(max - arr[0], max - arr[arr.length -1]);
}

你可能感兴趣的:(每天一道算法题12)