Все фишки в одном месте
Даны фишки, пронумерованные от 0 до n. Они находятся в позициях, от 1 до m. Массив
chipsпоказывает, что фишка chips[i]находится в позиции i.
Фишки можно переставлять влево или вправо на 1 или 2 шага любое количество раз. Каждая перестановка фишки имеет стоимость:
- Переместить
i-ю фишку влево или вправо на две позиции стоит 0. - Переместить
i-ю фишку влево или вправо на одну позицию стоит 1.
Изначально на одной позиции могут находиться несколько фишек.
Вернуть минимальную стоимость того, что мы можем переместить все фишки в одну позицию.
Пример 1:
Дано: chips = [1,2,3] - три фишки расставлены на разных местах 1, 2, 3 Результат: 1 Пояснение: Если мы хотим сместить всё в 1-ю позицию, то из позиции 3 мы переходим за нулевую стоимость, а из позиции 2 - за стоимость 1. Аналогично, если мы хотим сместить всё в позицию 3. Если мы хотим сместить всё в позицию 2, то стоимость перемещения из позиции 1 и 3 будет стоить нам по 1, то есть суммарно 2, а это не минимальная стомость, которая равна 1.
Пример 2:
Дано: chips = [2,2,2,3,3] Результат: 2 Пояснение: Позиция 1 у нас пустая. В позиции 2 у нас 3 фишки. А в позиции 3 - 2 фишки. Если мы хотим сместить всё в позицию 1, то это будет стоить суммарно 3, потому что из позиции 3 в 1 стоит 0, а в позиции 2 у нас 3 фишки и стоиомсть перемещения каждой = 1, поэтому суммарная стоимость равна 3. Аналогично, если мы хотим всё сместить в позицию 3. Только при этом в позиции 1 у нас нет ничего. Еслии мы хотим всё сместить в позицию 2, то нужно переместить две фишки из позиции 3, что будет стоить нам 2. И это минимальная стоимость.
Ограничения:
1 <= chips.length <= 1001 <= chips[i] <= 10^9
Мы помним, что перемещение на 2 позиции не стоит ничего. Поэтому мы можем сместить все нечётные фишки в позицию 1, а все чётные фишки в позицию 2 с нулевой стоимостью.
Затем мы просто объединим две стопочки, перемстив наименьшу поверх наибольшей. Если обе стопочкки одинаковы, то без разницы, куда что двигать. В любом случае минимум между чётной и нечетной стопочкой будет нашим результатом.
Компилируемое решение
public int minCostToMoveChips(int[] A) {
int odd = 0, even = 0;
for(int a : A)
if(a % 2 == 0)
++even; // считаем фишки на нечетных позициях -
// это будет стопка в позиции 1
else
++odd; // стопка в позиции 2 (на чётных позиция)
return Math.min(odd,even); // берем минимум
}
Комментарии
Отправить комментарий