ПОМОГИТЕ С ПИТОНОМ Наибольшее произведение двух чисел
Дан список, заполненный произвольными целыми числами. Найдите в этом списке два числа, абсолютное произведение которых максимально. Выведите эти числа в порядке неубывания.
Решение должно иметь сложность O(n), где n - размер списка. То есть сортировку использовать нельзя.
Тест 1
Входные данные:
4 3 5 2 5
Вывод программы:
5 5
Ответы
Ответ дал:
1
a = list(map(int, input.split()))
for i in range(len(a)):
a[i] = abs(a[i])
m = max(a)
a.pop(a.index(m))
n = max(a)
print(min(m, n), max(m, n))
Принцип решения в том, чтобы убрать все минусы у чисел, взять максимум, сохранить его и удалить из списка, а затем взять ещё один максимум, потом вывести числа в порядке неубывания.
BobbyFresnel:
Как минимум, после input надо ставить ()
"Решение должно иметь сложность O(n), где n - размер списка" - Ваше имеет O(4n), поскольку Вы использовали четырехпроходный алгоритм ( abs(), max(), index(), max() )
Конечно, это не n в квадрате, но плохо все равно.
Скобки просирать - типичная ошибка, тут ясно, тогда так пойдёт?
a = list(map(int, input().split()))
max_item1, max_item2 = 0, 0
for item in list:
if abs(item) >= max_item1:
max_item1 = item
max_item2 = max_item1
print(max_item1 * max_item2)
a = list(map(int, input().split()))
max_item1, max_item2 = 0, 0
for item in list:
if abs(item) >= max_item1:
max_item1 = item
max_item2 = max_item1
print(max_item1 * max_item2)
(индентация ушла в комментариях)
Ой, да мне-то все равно )))
Но тут реально однопроходный алгоритм.
Вас заинтересует
1 год назад
1 год назад
1 год назад
3 года назад
8 лет назад