Как этот код Python3 может быть оптимизирован для ошибок памяти? - PullRequest
0 голосов
/ 24 декабря 2018
import itertools

num_cases = int(input())

answer_list = []

while num_cases>0:
    live_ans = []
    nums = int(input())
    d1 = int(input())
    d2 = int(input())
    sample_space= {d1, d2}

    for i in itertools.product(sample_space, repeat = nums-1):
        if sum(i) not in live_ans:
            live_ans.append(sum(i))
        else:
            pass
    live_ans.sort()
    answer_list.append(live_ans)
    num_cases -= 1

for i in answer_list:
    finalans = " ".join(map(str, i))
    print(finalans)

Этот код хорошо работает для небольших тестовых примеров, таких как: 1 3 1 2

Но выдает ошибку памяти для таких входов, как: 1 58 69 24

(целые числа, разделенные пробелом, на самом делевведите как одно число на строку, как видно из кода)

Ошибка памяти возникает, когда itertool манипулирует кортежами продуктов, а значение nums огромно (например, 58 во втором случае).Что еще можно сделать?

С постановкой задачи можно ознакомиться здесь: https://www.hackerrank.com/challenges/manasa-and-stones/problem

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