題目描述
給定一個長度爲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;
}