Вы выполняете вычитания, используя o
для каждого l oop из m
.
. Для повышения производительности вам нужно либо l oop m
меньше, либо l oop o
Меньше.
Один из циклов o
Меньше - это предварительный расчет всех частичных сумм.
x
имеет значения из o
вычтенными. Возможно, вы вычтете только одно число, или два, или тысячу. Кто знает? И вы будете делать это для каждого l oop из m
.
Например, если бы x
были 10, а o
были [2, 4, 6, 8]
, третий член был бы тем, что завершило l oop, третий член - 12
, сумма 2
, 4
и 6
.
. Составление списка частичных сумм означает, что сложение необходимо выполнить только один раз.
itertools.accumulate
может сделать это за вас.
Если значения o
могут быть положительными или отрицательными, то вам нужно будет сделать линейный поиск как частичная сумма не будет в порядке возрастания. (Возможно, есть разумная структура данных, которую вы можете использовать, но я ее не знаю.)
Однако, если значения o
все положительные, вы можете выполнить двоичный поиск частичных сумм.
См. этот ответ до Python двоичная поисковая функция для поиска первого числа в отсортированном списке, который больше указанного c значения