양의 짝수 정수의 최대 분할

1643 단어 theabbieleetcodedsa
정수finalSum가 주어집니다. 그것을 고유한 양의 짝수 정수의 최대 수의 합으로 나눕니다.
  • 예를 들어 finalSum = 12 가 주어졌을 때 finalSum , (12) , (2 + 10)(2 + 4 + 6) 와 같은 분할이 유효합니다((4 + 8) 까지 합산되는 고유한 양의 짝수). 그 중 (2 + 4 + 6)는 정수의 최대 개수를 포함합니다. 모든 숫자가 고유해야 하므로 finalSum(2 + 2 + 4 + 4)로 분할할 수 없습니다.

  • 최대 정수 수를 포함하는 유효한 분할을 나타내는 정수 목록을 반환합니다. finalSum 에 대한 유효한 분할이 없으면 빈 목록을 반환합니다. 어떤 순서로든 정수를 반환할 수 있습니다.

    예 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] 등도 허용됩니다.

    제약:
  • 1 <= finalSum <= 1010

  • 해결책:

    class Solution:
        def maximumEvenSplit(self, finalSum: int) -> List[int]:
            res = []
            if finalSum & 1:
                return res
            i = 1
            while i * (i + 1) <= finalSum:
                res.append(2 * i)
                i += 1
            if i * (i + 1) > finalSum:
                res.pop()
                res.append(finalSum - (i - 1) * (i - 2))
            return res
    

    좋은 웹페이지 즐겨찾기