Решение:
Эта проблема может быть решена с помощью алгоритма скользящего окна:
раздвижные окна алгоритм сначала устанавливает два указателя, соответственно, слева и справа, слева и rifght указатель Указатель для ограничения объема (то есть выравнивание области видимости) скользящего окна;
скользящего окна, правая и левая рука указатели перемещаются вправо,
найти все устраивало в скользящем окне.
Эта проблема ищет непрерывную последовательность положительных целых чисел, расположение , таким образом , возможно , чтобы целевое число равно 1 - 1 диапазон;
и цели из - мишени, комбинация , которые не могут быть медианой последовательности на мишень, и больше , чем среднее количество композиций,
например:
средний показатель составляет 11, то есть 6, 6 и последующее возможно за счет расположения состоящей из 6,
таким образом , выстроены диапазон числа от 1 до 1 + 2 // мишени;
левый указатель инициализируется 1 , указатель rihgt также инициализируется до 1; каждый диапазон рассчитывается диапазон (влево, вправо + 1)
, если значение меньше , чем цели, то правая + = 1;
если значение больше , чем мишень, то левый + = 1;
если он равен целевое значение, необходимо добавить левую, правую руку , в то же время также необходимость увеличения;
- В начале каждого элемента расположен только в одном наборе, поэтому необходимость найти левый плюс 1;
- Текущая слева направо и, конечно, больше, чем слева направо + 1 и, следовательно, добавить право, уменьшая время сложность, скорость до операции;
Код выглядит следующим образом:
class Solution:
def findContinuousSequence(self, target):
left = 1
right = 1
result = []
while right <= (target//2 + 1):
cur_sum = sum(list(range(left, right + 1)))
if cur_sum < target:
right += 1
elif cur_sum > target:
left += 1
else:
result.append(list(range(left, right + 1)))
left += 1
right += 1
return result