Python

Вот про это задание про нахождение в массиве последовательностей из подряд стоящих чисел дающих сумму 3 (...)

То есть nums = [4,-1,7,0,1,2,-1,5], S = 3, последовательности: [4, -1], [0, 1, 2], [1, 2]
Моё решение вроде и не так уж плохо... Или опять по мнению местных "брадатых экспертов" - "ой, кошмар, кошмар, караул...."
Хотя что-то "не так" возможно и действительно тут может быть при других значениях и какие-то ошибки всё же есть... Кажется вижу их
Так что как нужно чтобы было абсолютно правильно?
Харченко Юрий
Харченко Юрий
5 840
 nums = [4,-1,7,0,1,2,-1,5] 
for x in range(len(nums)):
if 3 in [sum(nums[x:x+2]), sum(nums[x:x+3])]: print(x1 if sum(x1:=nums[x:x+2]) == 3 else x2 if sum(x2:=nums[x:x+3]) == 3 else None)


можно конечноже короче и в 1 стрчку кода
ДВ
Дмитрий Вингр
7 589
Лучший ответ
Азамат Мухаметжанов Он вычисляет далеко не то, что сказано в условии задания.
Алгоритм квадратичной сложности. Но сомневаюсь, что он вычисляет именно то, что надо. Если, например, подать на вход список [4, -1, 7, -1, 0, 1, 2, 0, 1, -1, 5], то подпоследовательности [4, -1], [0, 1, 2], [0, 1, 2, 0], [1, 2, 0], [-1, 0, 1, 2, 0, 1], [0, 1, 2, 0, 1, -1], [1, 2, 0, 1, -1] дают в сумме три, и это решение их все не найдёт, потому что ищет только непересекающиеся подпоследовательности, а в формулировке задачи я такого условия не вижу.

Хранение подпоследовательностей не нужно. Лишний расход памяти. Первого и "послепоследнего" индексов хватит.

Если в res добавляются только списки чисел, то условие False in i всегда будет False.

Касательно оформления кода, написано через задницу. Например, использование одной и той же переменной i для семантически абсолютно разных значений, да ещё и разных типов - это ламерство. Вообще, школьная привычка писать "for i in ..." - это заразная болезнь, и от неё нужно лечиться. Название переменной должно отражать её назначение. По сложившейся математической нотации i, j, k - это целочисленные счётчики, а не списки, не строки, не логические значения.

"Решение, вроде, не так уж плохо" - это логика гуманитария, которому в программировании можно доверить только добавлять поля в формочки, посадив ещё 4-х гуманитариев контролировать результат. Зарплату, естественно, делить на пятерых. С практической точки зрения алгоритм характеризуется вычислительной сложностью и расходом памяти, а не расплывчатыми субъективными оценками.
MD
Mairambek Duisho Uulu
87 571