每日一題 81 左右最值最大差 貪心

2021-09-29 18:07:20 字數 1117 閱讀 4009

給定乙個長度為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

要求兩個最大值的差,所以肯定可以找到整個陣列的最大值,然後就可以確定一邊的最大值了;

另一邊的最大值就是要找左右兩端最小那個數, 因為無論他們怎麼往外擴都只能增大,不能減小;

所以最大差值就是第一次找出來的最大值和左右兩邊小的那個數的差了。

按照題意,將i為0到n-1的情況都羅列出來即可

建立 mxl 記錄i位左側最大值,建立 mxr 記錄i位右側最大值。這是在找最大值

核心要體會到第 i 位左側的最大值就是 i - 1 位最大值和 i 的值的較大值

例如輸入資料為 [2,7,3,1,1] mxl 中的值為: [2,7,7,7,7] mxr 中的值為: [7,7,3,1,1]

然後再拿著每個位置的最大值依次去和陣列的每個元素做減法,來找到差值的最大。牢記,最大差值就是最大值和左右兩邊最小的那個數的差

class

maxgap

for(

int i = n -

1; i >=0;

--i)

// 例如輸入資料為 [2,7,3,1,1]

// mxl 中的值為: [2,7,7,7,7]

// mxr 中的值為: [7,7,3,1,1]

int res = int_min;

// 接下來的迴圈就依次求差找最大值即可

for(

int i =

0; i < n -1;

++i)

// 求差

res =

max(res,

abs(mxl[i]

- mxr[i +1]

));return res;}}

;

左右最值最大差 貪心

給定乙個長度為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,1 ...

左右最值最大差

題目 給定乙個長度為n n 1 的整型陣列a,可以將a劃分成左右兩個部分,左部分a 0 k 右部分a k 1 n 1 k可以取值的範圍是 0,n 2 求這麼多劃分方案中,左部分中的最大值減去右部分最大值的絕對值,最大是多少?給定整數陣列a和陣列的大小n,請返回題目所求的答案。測試樣例 2,7,3,1...