Woodyiiiiiii / LeetCode

My private record of Leetcode solution

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Leetcode 2178. Maximum Split of Positive Even Integers

Woodyiiiiiii opened this issue · comments

这种最值问题我总觉得是不是有两种做法:

  1. 二分
  2. 贪心

这道题显然不能用二分法,所以只能用贪心。

从2开始,依次+=2,直到finalSum小于等于0,顺便记录。如果刚好等于0,则算了;否则将剩余的finalSum值加入到list结果里的最后一个值。

有点类似求一个整数的因数那样?稍微有点不懂。

class Solution {
    public List<Long> maximumEvenSplit(long finalSum) {
        List<Long> list = new ArrayList<>();
        if (finalSum % 2 != 0) {
            return list;
        }
        long num = 2;
        long sum = 0;
        while (finalSum > 0) {
            sum = finalSum;
            finalSum -= num;
            if (finalSum >= 0) {
                list.add(num);
                num += 2;
            }
        }
        if (finalSum == 0) {
            return list;
        } else {
            long last = list.get(list.size() - 1);
            list.remove(list.size() - 1);
            list.add(last + sum);
            return list;
        }
    }
}