Соседи одного знака
Вы решили задачу. Теперь можно сравнить подходы.
Проверяем соседние пары слева направо и останавливаемся на первой подходящей.
Авторский разбор для локальной версии на основе условия задачи. Это не выгрузка чужих посылок и не официальное решение исходного сайта.
Ваше принятое решение
Рекомендуемое решение: Сравнение произведения
Произведение строго положительно тогда и только тогда, когда оба числа ненулевые и имеют одинаковый знак.
a = list(map(int, input().split()))
for i in range(len(a) - 1):
if a[i] * a[i + 1] > 0:
print(a[i], a[i + 1])
break
Время: O(n). Память: O(n), включая входные данные.
Другой способ: Поток соседних значений
Храним предыдущий элемент и сравниваем знаки без умножения. split всё равно хранит слова входной строки.
values = map(int, input().split())
previous = next(values, None)
for current in values:
if (previous > 0 and current > 0) or (previous < 0 and current < 0):
print(previous, current)
break
previous = current
Время: O(n). Память: O(n) для разбитой входной строки; O(1) числовых переменных.
На что обратить внимание
- Ноль не является ни положительным, ни отрицательным.
- После первой пары нужен break.
Рекомендация учитывает сложность и читаемость для этой задачи. Единственного самого быстрого решения для всех размеров входа и всех компьютеров может не быть.