Быстрый способ получить все подсписки списка - PullRequest
0 голосов
/ 03 мая 2020

Я недавно разбомбил интервью по кодированию, потому что не смог сгенерировать все возможные подсписки списка достаточно быстро. Более конкретно: (используя python)

  • Нам дан список строковых чисел ["1", "3", "2", ...]
  • Сколько подсписков этого списка размера 6, конкатенированных, делятся на 16?
  • Обратите внимание, что хотя элементы в исходном списке могут не быть уникальными, вы должны рассматривать их как уникальные при создании своих подсписков. Например, для [1, 1, 1] подсписок первых двух 1 и последних двух 1 - это разные подсписки.

Используя itertools.combinations, я смог генерировать все свои подсписки достаточно быстро, но затем перебрал все эти списки, чтобы определить, какие из них были «делимыми» на 16, были слишком медленными.

Так есть ли способ создать подсписки с той же скоростью (или быстрее), что и itertools.combations, проверяя каждый подсписок, как я его создаю, чтобы увидеть, делятся ли они на 16?

Любое понимание будет очень признателен!

1 Ответ

0 голосов
/ 03 мая 2020

Сортировка списка. найдите наименьший список (по длине), имеющий сумму не менее 16 и делимый на нее (скажем, s). затем проверьте список всех размеров от s до 6. Это должно уменьшить число размеров в геометрической прогрессии, поскольку чем больше длина подсписка, тем меньше число подсписков

...