左右最值最大差

題目描述

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

分析

首先可以確定的就是兩個數中肯定有一個是A中的最大值。
假設是A[i],這時候我們有兩種選擇:左邊和右邊。由於使用k劃分爲左右兩塊,那麼我們就要確定A[i]在作弊還是右邊。假設在左邊,那我們要取的值肯定是右邊的,可以確定的是無論k爲多少,最右邊的也就是A[n - 1]肯定在範圍內,這時候我們判斷一下,如果取得不是A[n - 1],是A[i] ( k < i < n - 1)。如果大於A[n - 1]那我們還不如取A[n - 1]都會比這個差值大(只要調整k讓i < k就可以),如果A[i] < A[n - 1],那不用說我們肯定取A[n - 1],所以無論如何都是最右邊的值。另一種情況一樣,取最左邊的值,所以我們取兩端比較小的值就可以。

代碼

    public int findMax(int[] A, int n) {
        int max = 0;
        for (int i = 0; i != n; i++) {
            max = Math.max(max, A[i]);
        }
        int min = Math.min(A[0], A[n - 1]);
        return max - min;
    }
發佈了40 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章