• Предмет: Информатика
  • Автор: bakyt24081974
  • Вопрос задан 1 год назад

ПОМОГИТЕ С ПИТОНОМ Наибольшее произведение двух чисел
Дан список, заполненный произвольными целыми числами. Найдите в этом списке два числа, абсолютное произведение которых максимально. Выведите эти числа в порядке неубывания.
Решение должно иметь сложность O(n), где n - размер списка. То есть сортировку использовать нельзя.
Тест 1
Входные данные:
4 3 5 2 5
Вывод программы:
5 5

Ответы

Ответ дал: lingvini2013
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 надо ставить ()
BobbyFresnel: "Решение должно иметь сложность O(n), где n - размер списка" - Ваше имеет O(4n), поскольку Вы использовали четырехпроходный алгоритм ( abs(), max(), index(), max() )
BobbyFresnel: Конечно, это не n в квадрате, но плохо все равно.
lingvini2013: Скобки просирать - типичная ошибка, тут ясно, тогда так пойдёт?

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)
lingvini2013: (индентация ушла в комментариях)
BobbyFresnel: Ой, да мне-то все равно )))
BobbyFresnel: Но тут реально однопроходный алгоритм.
Похожие вопросы