Каждый день Литкод
Решение 1: жадность
Сначала легко вывести:
- При переходе с четной (нечетной) позиции на другую четную (нечетную) позицию минимальные накладные расходы в это время равны 0;
- Для перехода из четной (нечетной) позиции в другую нечетную (четную) позицию минимальные служебные данные в это время равны 1.
Тогда мы можем рассматривать начальные «фишки» в каждой четной позиции в целом и «фишки» в каждой нечетной позиции в целом. Поскольку наша цель состоит в том, чтобы наконец переместить все «фишки» в одну и ту же позицию, есть только две ситуации для конечной позиции:
- Переходя к четной позиции, минимальной стоимостью в это время является количество «фишек» в исходной нечетной позиции.
- Перейти на нечетную позицию, минимальная стоимость в это время равна количеству «фишек» в исходной четной позиции
код:
/*
* @lc app=leetcode.cn id=1217 lang=cpp
*
* [1217] 玩筹码
*/
// @lc code=start
class Solution
{
public:
int minCostToMoveChips(vector<int> &position)
{
int odd = 0, even = 0;
for (int &index : position)
{
if (index % 2)
odd++;
else
even++;
}
return min(odd, even);
}
};
// @lc code=end
результат:
Анализ сложности:
Временная сложность: O(n), где n — длина позиции массива, и выполняется только один обход массива.
Пространственная сложность: O(1).