Задать вопрос
@AniArim

Алгоритм поиска минимального количества ходов, требуемых для приведения всех элементов к одному числу (Python)?

Прошу помочь решить задачу или хотя бы намекнуть, в какую сторону "копать". Дан массив целых чисел. Необходимо найти минимальное количество ходов, требуемых для приведения всех элементов массива к одному числу. За один ход можно уменьшить или увеличить один элемент массива на 1. Все достаточно просто пока массив выглядит вот так:
import math

nums = [1, 10, 2, 9]
result_digit = math.ceil((max(nums))/2)
count = 0
for id, i in enumerate(nums):
    while i != result_digit:
         if i < result_digit:
             i += 1
             count += 1
         elif i > result_digit:
              i -= 1
              count += 1
         else:
            nums[id] = i
    print(count)

Но, если nums = [0, 0, 0, 1] тогда этот алгоритм не подходит и выведет результат 3 вместо 1. Массив может быть любой длинны.
  • Вопрос задан
  • 2711 просмотров
Подписаться 1 Простой Комментировать
Ответ пользователя Akina К ответам на вопрос (5)
@Akina
Сетевой и системный админ, SQL-программист.
Если количество элементов массива нечётно, то тем значением, к которому надо привести элементы, равно значению строго среднего элемента (медианы массива).

Если количество элементов массива чётно, то в качестве конечного значения подходит любое значение между двумя средними элементами, включительно.

Для того, чтобы убедиться в этом - просто подумай, как изменяется требуемое количество шагов выравнивания, если двигать конечное значение на 1 вправо или влево, в зависимости от того, сколько элементов справа и сколько слева.
Ответ написан
Комментировать