我們將給定的陣列 a 分成 k 個相鄰的非空子陣列 ,我們的分數由每個子陣列內的平均值的總和構成。計算我們所能得到的最大分數是多少。看了網上的解題報告,一開始還是一臉懵,然後又多看了幾遍,寫了一遍,也算是理解了吧。注意我們必須使用 a 陣列中的每乙個數進行分組,並且分數不一定需要是整數。
示例:輸入:
a = [9,1,2,3,9]
k = 3
輸出: 20
解釋:a 的最優分組是[9], [1, 2, 3], [9]. 得到的分數是 9 + (1 + 2 + 3) / 3 + 9 = 20.
我們也可以把 a 分成[9, 1], [2], [3, 9].
這樣的分組得到的分數為 5 + 2 + 6 = 13, 但不是最大值.
題目要求把a序列劃分成k個相鄰的子集,那麼最主要的就是找到最合適的分割點
那我們很容易可以看出來,不分割的話,最後加和是最大的,如果k>a.len,那麼最後結果即a 序列各個數相加。
如果 k=1 ,那麼只有乙個分組,也就是所有數字之和/a.len
如果 k=2 ,那麼分兩組,我們需要找到乙個分割點,使得最後加和最大
如果 k=3 ,那麼分三組,我們需要找到兩個分割點,使得最後加和最大,但如果我們直到 k=2 的情況下,最優的分割點位置, 我們是不是就可以在上面的基礎上,再找乙個分割點 , 即三組的最優加和。
如果 k=4 ,那麼分為四組,需要三個分割點,在已知k=3的最優分割點位置,再找乙個,即四組的最優加和。
……那重點還是在於找分割點。
dp[k][i] = max( dp[k - 1][i], dp[k - 1][j] + (sum[j + 1, i] / (i - j));sum陣列用來儲存加和。(k > = 1, sum[j + 1, i]表示區間j+1到i中間所有數的和)
這裡的 j 表示在索引為j的數字之後將序列進行分割, j = 0,1,2,3……i-1
class
solution}}
}return dp[k-1]
[len-1]
;}}
leetcode813 最大平均值和的分組
我們將給定的陣列 a 分成 k 個相鄰的非空子陣列 我們的分數由每個子陣列內的平均值的總和構成。計算我們所能得到的最大分數是多少。注意我們必須使用 a 陣列中的每乙個數進行分組,並且分數不一定需要是整數。示例 輸入 a 9,1,2,3,9 k 3 輸出 20 解釋 a 的最優分組是 9 1,2,3 ...
最大平均(和)子串行
描述 給定n個數的陣列,找到所有長度大於等於k的連續子陣列中平均值最大的那個。返回那個最大的平均值。1 k n 10000,陣列中的元素在範圍 10000,10000 之間,最後返回的答案的誤差應在10 5 以內。樣例 輸入 1,12,5,6,50,3 k 4 輸出 12.75 說明 長度為4的子陣...
LeetCode 1792 最大平均通過率(堆)
題意 一所學校裡有一些班級,每個班級裡有一些學生,現在每個班都會進行一場期末考試。給你乙個二維陣列 classes 其中 classes i passi,totali 表示你提前知道了第 i 個班級總共有 totali 個學生,其中只有 passi 個學生可以通過考試。給你乙個整數 extrastu...