ETH官方钱包

前往
大廳
主題

LeetCode - 2178. Maximum Split of Positive Even Integers 解題心得

Not In My Back Yard | 2022-09-28 12:00:10 | 巴幣 100 | 人氣 225

題目連結:


題目意譯:
你被給定一整數 finalSum。請將其拆分成一個盡可能多的相異偶數之和。

例如,給定 finalSum = 12,下列拆分是合法的(每個偶數相異並有著總和 finalSum):(12) 、 (2 + 10) 、 (2 + 4 + 6) 以及 (4 + 8)。在這之中,(2 + 4 + 6) 有最多個相異偶數。注意到 finalSum 不能拆分成 (2 + 2 + 4 + 4),因為所有數字應相異。

回傳一整數列表,其代表著一個合法拆分且其有著最多個整數。如果 finalSum 不存在合法分拆,則回傳一個空列表。你可以按任意順序排列答案並回傳。

限制:
1 ≦ finalSum ≦ 10 ^ 10



範例測資:
範例 1:
輸入: finalSum = 12
輸出: [2,4,6]
解釋:下列幾個為合法拆分:(12) 、 (2 + 10) 、 (2 + 4 + 6) 和 (4 + 8)。
(2 + 4 + 6) 有著最大數量的整數,其數量為 3 個。因此我們回傳 [2,4,6]。
注意到 [2,6,4] 、 [6,2,4] 等也是可以被接受的。

範例 2:
輸入: finalSum = 7
輸出: []
解釋: 給定的 finalSum 沒有合法的分拆法。
因此我們回傳一個空陣列。

範例 3:
輸入: finalSum = 28
輸出: [6,8,2,12]
解釋: 下列幾個為合法拆分:(2 + 26) 、 (6 + 8 + 2 + 12) 和 (4 + 24)。
(6 + 8 + 2 + 12) 有著最大數量的整數,其數量為 4 個。因此我們回傳 [6,8,2,12]。
注意到 [10,2,4,12] 、 [6,2,4,16] 等也是可以被接受的。


解題思維:
可以看到不論多少個偶數相加,其總和必定是偶數。因此當 finalSum 是奇數時,其必定無解;而因為自身可以算作拆分的方式之一,因此 finalSum 是偶數時必定有解,也因此必定存在至少一個有最多偶數的拆分方法(以下稱其為「最佳解」)。



而當 finalSum 是偶數的時候,其必定存在一個最佳解是 (2 + 4 + 6 + ……) + X(其中 X 之值比較特別,等下再說明),原因如下:
假設我們知道 finalSum 有一個最佳解為 a + b + c + …… + k,其中 a 、 b 、c 、 …… 、 k 皆是偶數。不失一般性地,假設 a < b < c < …… < k(因為整數加法交換順序不影響結果)。則
2 + b + c + …… + (k + (a - 2))
也同為一個最佳解。例如 18 有一最佳解為 4 + 6 + 8。而 2 + 6 + (8 + (4 - 2)) = 2 + 6 + 10 也是最佳解之一。

同理,
2 + 4 + c + …… + (k + (a - 2) + (b - 4))
也是一個最佳解。承上例,18 也有一個最佳解為 2 + 4 + (8 + (4 - 2) + (6 - 2)) = 2 + 4 + 12。

因此同樣的論述可以持續進行直到變成 (2 + 4 + 6 + ……) + X 之形式為止。而 X 之值為何?令 N 為最後一個(也就是最大的)數字使得不等式
2 + 4 + 6 + …… + N ≦ finalSum
成立之值。令不等式左方的等差級數總和為 S,則 X 之值即為 N + (finalSum - S)。

也就是說用 2 + 4 + 6 +……逼近到 finalSum 直到不能再逼近時(即找到了 N 值),剩下的(也就是 finalSum - S)直接塞到 N 那一項即可。因為 N 是逼近中最大的偶數,因此再加上一個正偶數只會更大,所以必定不會與前面的偶數重複。也因此這將會是一個合法的拆分,且偶數之數量是最多的。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作