Description
You are given an integer finalSum. Split it into a sum of a maximum number of unique positive even integers.
- For example, given
finalSum = 12, the following splits are valid (unique positive even integers summing up tofinalSum):(12),(2 + 10),(2 + 4 + 6), and(4 + 8). Among them,(2 + 4 + 6)contains the maximum number of integers. Note thatfinalSumcannot be split into(2 + 2 + 4 + 4)as all the numbers should be unique.
Return a list of integers that represent a valid split containing a maximum number of integers. If no valid split exists for finalSum, return an empty list. You may return the integers in any order.
Example 1:
Input: finalSum = 12 Output: [2,4,6] Explanation: The following are valid splits:(12),(2 + 10),(2 + 4 + 6), and(4 + 8). (2 + 4 + 6) has the maximum number of integers, which is 3. Thus, we return [2,4,6]. Note that [2,6,4], [6,2,4], etc. are also accepted.
Example 2:
Input: finalSum = 7 Output: [] Explanation: There are no valid splits for the given finalSum. Thus, we return an empty array.
Example 3:
Input: finalSum = 28 Output: [6,8,2,12] Explanation: The following are valid splits:(2 + 26),(6 + 8 + 2 + 12), and(4 + 24).(6 + 8 + 2 + 12)has the maximum number of integers, which is 4. Thus, we return [6,8,2,12]. Note that [10,2,4,12], [6,2,4,16], etc. are also accepted.
Constraints:
1 <= finalSum <= 1010
Solutions
Solution 1: Greedy
If finalSum is odd, it cannot be split into the sum of several distinct positive even integers, so we directly return an empty array.
Otherwise, we can greedily split finalSum in the order of 2, 4, 6, …, until finalSum can no longer be split into a different positive even integer. At this point, we add the remaining finalSum to the last positive even integer.
The time complexity is O(√finalSum), and ignoring the space consumption of the answer array, the space complexity is O(1).
class Solution: def maximumEvenSplit(self, finalSum: int) -> List[int]: if finalSum & 1: return [] ans = [] i = 2 while i <= finalSum: finalSum -= i ans.append(i) i += 2 ans[-1] += finalSum return ans(code-box)
