Как решить задачу линейным алгоритмом? Задачу решить могу, но вообще не выкупаю, почему в первом тесте ответ 2 5, а не 1 4: Отношение Дан массив a1,a2,...an. Необходимо выбрать в нём два элемента ai и aj, такие что i
Для решения этой задачи линейным алгоритмом можно использовать следующий подход:
Создать переменные для хранения индексов элементов i и j.Создать переменные для хранения максимального отношения и минимального элемента.Проитерироваться по массиву от начала до конца.Если текущий элемент больше минимального элемента, но отношение между текущим элементом и минимальным больше максимального отношения, то обновить максимальное отношение и индексы i и j.Обновить минимальный элемент, если текущий элемент меньше.
Пример кода на Python:
n = intinput()input()input()
arr = listmap(int,input().split())map(int, input().split())map(int,input().split()) max_ratio = 0 min_element = arr000
result_i = 0 result_j = 0 for i in range1,n1, n1,n: if arriii > min_element and arriii / min_element > max_ratio: max_ratio = arriii / min_element result_i = arr.indexminelementmin_elementminelement + 1 result_j = i + 1 if arriii < min_element: min_element = arriii if max_ratio > 1: printresulti,resultjresult_i, result_jresulti,resultj
else: print0,00, 00,0
Этот алгоритм проходит по массиву только один раз, что делает его линейным.
Для решения этой задачи линейным алгоритмом можно использовать следующий подход:
Создать переменные для хранения индексов элементов i и j.Создать переменные для хранения максимального отношения и минимального элемента.Проитерироваться по массиву от начала до конца.Если текущий элемент больше минимального элемента, но отношение между текущим элементом и минимальным больше максимального отношения, то обновить максимальное отношение и индексы i и j.Обновить минимальный элемент, если текущий элемент меньше.Пример кода на Python:
n = intinput()input()input() arr = listmap(int,input().split())map(int, input().split())map(int,input().split())max_ratio = 0
min_element = arr000 result_i = 0
result_j = 0
for i in range1,n1, n1,n:
if arriii > min_element and arriii / min_element > max_ratio:
max_ratio = arriii / min_element
result_i = arr.indexminelementmin_elementmine lement + 1
result_j = i + 1
if arriii < min_element:
min_element = arriii
if max_ratio > 1:
printresulti,resultjresult_i, result_jresulti ,resultj else:
print0,00, 00,0
Этот алгоритм проходит по массиву только один раз, что делает его линейным.