У меня есть список (длиной до 10000) чисел 0, 1 или 2. Мне нужно посмотреть, сколько последовательных подпоследовательностей имеет общее число, которое НЕ равно 1. Мой текущий метод заключается в том, чтобы для каждого списка сделать:
cons = 0
for i in range(seqlen+1):
for j in range(i+1, seqlen+1):
if sum(twos[i:j]) != 1:
cons += 1
Таким образом, пример ввода будет:
[0, 1, 2, 0]
, а вывод будет
cons = 8
, поскольку 8 рабочих подпоследовательностей:
[0] [2] [0] [1,2] [2, 0] [0, 1, 2] [1, 2, 0] [0, 1, 2, 0]
Проблема в том, что простое выполнение всех этих подпоследовательностей (i в диапазоне, j в диапазоне) занимает почти больше времени, чем разрешено, а когда добавляется оператор if, выполнение кода на сервере занимает слишком много времени , (Для ясности, это лишь малая часть более крупной проблемы, я не просто прошу решение всей проблемы). В любом случае, есть ли другой способ проверить быстрее? Я не могу придумать ничего такого, что не приводило бы к тому, что каждый раз приходилось выполнять больше операций.