拆分成最多数目的正偶数之和【LC2178】
给你一个整数
finalSum
。请你将它拆分成若干个 互不相同 的正偶数之和,且拆分出来的正偶数数目 最多 。比方说,给你
finalSum = 12
,那么这些拆分是 符合要求 的(互不相同的正偶数且和为finalSum
):(2 + 10)
,(2 + 4 + 6)
和(4 + 8)
。它们中,(2 + 4 + 6)
包含最多数目的
- 整数。注意
finalSum
不能拆分成(2 + 2 + 4 + 4)
,因为拆分出来的整数必须互不相同。请你返回一个整数数组,表示将整数拆分成 最多 数目的正偶数数组。如果没有办法将
finalSum
进行拆分,请你返回一个 空 数组。你可以按 任意 顺序返回这些整数。
- 思路
从最小偶数开始拆分finalSum
,尽可能放小偶数,使最终拆分的偶数数目最多。由于拆分出来的整数必须互不相同,那么需要判断剩余值是否小于下一个存放的偶数,如果是那么需要直接存放剩余值,不能进行拆分,否则会出现重复值 - 实现
class Solution { public List<Long> maximumEvenSplit(long finalSum) { // 奇数返回空,偶数从最小偶数开始进行拆分 List<Long> res = new ArrayList<>(); if ((finalSum & 1) == 1) return res; long cur = 2; while(finalSum > 0){ if (cur + 2 > finalSum - cur){ res.add(finalSum); finalSum = 0; }else{ res.add(cur); finalSum -= cur; cur += 2; } } return res; } }