題目要求:
給定乙個長度為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
剛開始做這個題,看題目中「左部分中的最大值減去右部分最大值的絕對值,最大是多少」,我剛開始理解成了「左部分中的最大值,減去,右部分最大值的絕對值,最大是多少」,寫出了程式,有測試用例沒有通過,看結果顯示,我理解錯了!!原意應理解為「左部分中的最大值減去右部分,差的絕對值最大是多少」。天哪,語文功底好弱。。還是要多刷題。
對於理解正確了語義之後,開始分析,若要求差值最大值,那減數必須足夠大,那第一步就先找到陣列中的最大值,最大值可能在中間,也可能在兩邊。先對在兩邊的進行分析,如果在最左邊,那麼若想得到差值最大,那它的右側值中的最大值必須足夠小。而右側的最大值與最右端數的大小有關。舉例來說,將最大值右邊的數字想像成山峰,想在群峰中找到最高山峰,那就看最右端的山峰,若最右端的山峰高於它周邊的山峰,那沒辦法了,怎麼分,都只能選它了,當它比周圍山峰低時,那好啊,就選它,所以不管高還是低,只和最右側的山峰有關;同理,如果最大值在右側,只和最左端數字有關;那如果最大值在中間,那就先比較左右端,選取較小者唄。
其實這到題的編碼很容易很容易,關鍵在能不能分析出這個規律。分析出了這個規律,就能感覺這道題就是個坑,坑,坑。。。
再次抱歉我的語文表達能力不是很好,但我會繼續努力,繼續寫東西,不斷提高。
最後,貼出**以供後續查閱:
class maxgap }
if (loc == n - 1)
ans = abs(max - a[0]);
if (loc == 0)
ans = abs(max - a[n - 1]);
if (loc > 0 && loc < n - 1)
return ans; }
};
左右最值最大差
給定乙個長度為n n 1 的整型陣列a,可以將a劃分成左右兩個部分,左部分a 0.k 右部分a k 1.n 1 k可以取值的範圍是 0,n 2 求這麼多劃分方案中,左部分中的最大值減去右部分最大值的絕對值,最大是多少?給定整數陣列a和陣列的大小n,請返回題目所求的答案。測試樣例 2,7,3,1,1 ...
左右最值最大差
題目 給定乙個長度為n n 1 的整型陣列a,可以將a劃分成左右兩個部分,左部分a 0 k 右部分a k 1 n 1 k可以取值的範圍是 0,n 2 求這麼多劃分方案中,左部分中的最大值減去右部分最大值的絕對值,最大是多少?給定整數陣列a和陣列的大小n,請返回題目所求的答案。測試樣例 2,7,3,1...
左右最值最大差
給定乙個長度為n n 1 的整型陣列a,可以將a劃分成左右兩個部分,左部分a 0 k 右部分a k 1 n 1 k可以取值的範圍 0,n 2 求這麼多劃分方案中,左部分中的最大值減去右部分最大值的絕對值,最大是多少?給定整數陣列a和陣列的大小n,請返回題目所求的答案。題目可以理解為,a中的最大元素值...