Какова временная сложность моего решения для равных подмножеств разделов? - PullRequest
0 голосов
/ 29 апреля 2020

Я прочитал о Разделение Равное Подмножество Сумм

Мое решение вкратце: вызов 2 рекурсивных функций, одна из которых берет элемент и уменьшает сумму, другая не принимает элемент и движение вперед.

Решение приходит, когда 1 функция возвращает True, из-за ИЛИ

helper(s1 + nums[i], s2, i + 1, memo) or helper(s1, s2, i + 1, memo)

В моем коде я использовал динамический c программный подход, который сохраняет сумму.

hashed = (s1 + s2)

Является ли мое решение временной и пространственной сложностью O (N)?

Это мое решение:

class Solution:
def canPartition(self, nums: List[int]) -> bool:
    def helper(s1, s2, i, memo):

        # recursion

        hashed = (s1 + s2)
        if hashed in memo.keys():
            return memo[hashed]

        if s1 == s2:    # we have 2 groups of sums that sums total
            return True

        if s1 > s2: # we have too big group
            return False

        if i == len(nums):  # the end
            return s1 == s2

        # 2 options : move to next index with/witohut counting index
        memo[hashed] = helper(s1 + nums[i], s2, i + 1, memo) or helper(s1, s2, i + 1, memo)

        return memo[hashed]

    # begin

    s = sum(nums)   # sum
    memo = {}   # dynamic programing

    if s % 2 == 0:  # odd sum can't be divided equally
        return helper(0, s // 2, 0, memo)

    return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...