Как решить задачу линейным алгоритмом? Задачу решить могу, но вообще не выкупаю, почему в первом тесте ответ 2 5, а не 1 4: Отношение Дан массив a1,a2,...an. Необходимо выбрать в нём два элемента ai и aj, такие что i < j, и отношение aj/ai — максимально и больше 1. Входные данные В первой строке задано целое число 2 ⩽n⩽ 100 000 — количество элементов в массиве. Во второй строке заданы n целых положительных чисел ai(1 ⩽i⩽n, 1 ⩽ai⩽ 5000). Выходные данные Выведите два числа — индексы элементов i и j. Если ответов несколько, то выведите любой из них. Если ответа нет, то выведите два нуля, разделённых пробелом.Тесты 6 10 3 5 3 11 92 5 4 5 5 5 50 0

17 Сен 2022 в 19:52
126 +1
0
Ответы
1

Для решения этой задачи линейным алгоритмом можно использовать следующий подход:

Создать переменные для хранения индексов элементов i и j.Создать переменные для хранения максимального отношения и минимального элемента.Проитерироваться по массиву от начала до конца.Если текущий элемент больше минимального элемента, но отношение между текущим элементом и минимальным больше максимального отношения, то обновить максимальное отношение и индексы i и j.Обновить минимальный элемент, если текущий элемент меньше.

Пример кода на Python:

n = int(input())
arr = list(map(int, input().split()))
max_ratio = 0
min_element = arr[0]
result_i = 0
result_j = 0
for i in range(1, n):
if arr[i] > min_element and arr[i] / min_element > max_ratio:
max_ratio = arr[i] / min_element
result_i = arr.index(min_element) + 1
result_j = i + 1
if arr[i] < min_element:
min_element = arr[i]
if max_ratio > 1:
print(result_i, result_j)
else:
print(0, 0)

Этот алгоритм проходит по массиву только один раз, что делает его линейным.

16 Апр в 17:56
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 211 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир