数轴上放置了一些筹码,每个筹码的位置存在数组 chips 当中。
你可以对 任何筹码 执行下面两种操作之一(不限操作次数,0 次也可以):
将第 i 个筹码向左或者右移动 2 个单位,代价为 0。
将第 i 个筹码向左或者右移动 1 个单位,代价为 1。
最开始的时候,同一位置上也可能放着两个或者更多的筹码。
返回将所有筹码移动到同一位置(任意位置)上所需要的最小代价。
解题思路
- 题目中的移动两个单位不是距离的意思而是移动了两个数量或者一个数量的筹码
- 你移动了一个筹码 代价为1 也就是奇数
你移动了两个筹码 代价为0 也就是偶数 - 由移动的规律可以知道 奇数和奇数移动到一起 偶数和偶数移动到一起 移动后奇数的数量如果小 那就整体放在偶数上 则最小代价为奇数
- 移动后奇数的数量如果大 那就整体放在奇数上 则最小代价为奇数-1 因为奇数偶数是相邻的
public int minCostToMoveChips(int[] chips){
int odd = 0,even = 0;
for (int data : chips){
if(data %2 == 0){
odd++;
}else{
even++;
}
}
return Math.min(odd,even);
}