左右最值最大差問題

左右最值最大差問題

作者:Grey

原文地址: 左右最值最大差問題

題目鏈接

牛客:左右最值最大差

描述

給定一個長度爲N(N>1)的整型數組A,可以將A劃分成左右兩個部分,左部分A[0..K],右部分A[K+1..N-1],K可以取值的範圍是[0,N-2]。求這麼多劃分方案中,左部分中的最大值減去右部分最大值的絕對值,最大是多少?

給定整數數組A和數組的大小n,請返回題目所求的答案。

測試樣例:

A:[2,7,3,1,1]

n:5

返回:6

主要思路

假設數組長度爲len,遍歷一遍數組,得到數組的最大值max,然後比較0位置和len-1位置的值,取較小的那個,假設爲m,則max - m即爲答案。

完整代碼

public class MaxGap {
    public int findMaxGap(int[] A, int n) {
        int max = A[0];
        int len = A.length;
        for (int i = 1; i < len; i++) {
            max = Math.max(A[i], max);
        }
        return max - (Math.min(A[0], A[len - 1]));
    }
}

證明

由於全局最大值是max,所以無論max被劃分到哪個部分,都會成爲這部分的最大值。假設max被劃分到了右邊部分,所以右邊部分的最大值就是max,假設左邊部分的最大值是m,那麼max - m 即爲一個答案候選。要使得max - m最大,而左邊部分不能爲空,所以左邊部分必須要包含0位置的值,所以,在左邊只包含0位置值的時候,max - m才能做到最大,即:max - arr[0];同理,假設max被劃分到了左邊,右邊最大值假設爲n,要使得max - n最大,len - 1位置的值又必須包含在右邊,那麼max - arr[len-1]纔是最大的。所以最終的答案就是:

max - Math.min(arr[0],arr[len-1]);

更多

算法和數據結構筆記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章