🖥 Задача



В шеренгу друг за другом стоят n человек, рост i-го из них равен ai условных единиц. Вы тоже собираетесь встать в эту шеренгу, при чем вам хочется встать на такую позицию p, чтобы f(p) = [количество людей левее вас того же роста, что и вы] умножить на [количество людей правее вас ростом, не равным росту вас] было максимально. Для этого вы можете встать в начало шеренги, в её конец, или между любыми 2мя соседними людьми. К сожалению вы не можете точно вспомнить ваш рост, у вас есть только m предположений о том, каким он может быть, и для каждого из них вы хотели бы знать оптимальную позицию, на которую вам стоило бы встать.



Решение:



Cчитаем сразу для нулевой позиции, сколько в списке не вашего роста для каждой гипотезы. А потом на каждом шаге изменяем кол-во равных слева и неравных справа по текущему значению списка



equal = [0 for i in range(len(m))]

notequal = [len(list(filter(lambda x: x != m[i], n))) for i in range(len(m))]

valsave = [0 for i in range(len(m))]

possave = [0 for i in range(len(m))]



for i in range(len(n)):

for x in range(len(m)):

if n[i] == m[x]:

equal[x] += 1

if n[i] != m[x]:

notequal[x] -= 1



val = equal[x] * notequal[x]

if val > valsave[x]:

valsave[x] = val

possave[x] = i+1

print(possave)




Пишите свое решение в комментариях👇



@python_job_interview