题目:
有 n
个筹码。第 i
个筹码的位置是 position[i]
。
我们需要把所有筹码移到同一个位置。在一步中,我们可以将第 i
个筹码的位置从 position[i]
改变为:
position[i] + 2
或position[i] - 2
,此时cost = 0
position[i] + 1
或position[i] - 1
,此时cost = 1
返回将所有筹码移动到同一位置上所需要的 最小代价 。
思路方法:贪心
首先很容易得出:从一个偶(奇)数位置改变到另一个偶(奇)数位置,即此时的最小开销为0
从一个偶(奇)数位置改变到另一个奇(偶)数位置,此时的最小开销是1
那么我们可以把初始每一个偶数位置的「筹码」看作一个整体,每一个奇数位置的「筹码」看作一个整体。因为我们的目标是最后将全部的「筹码」移动到同一个位置,那么最后的位置只有两种情况:
1,移动到某一个偶数位置,此时的开销最小值就是初始奇数位置「筹码」的数量。
2,移动到某一个奇数位置,此时的开销最小值就是初始偶数位置「筹码」的数量。
那么这两种情况中的最小值就是最后将所有筹码移动到同一位置上所需要的最小代价。
class Solution {
public:
int minCostToMoveChips(vector<int>& position) {
int even=0,odd =0;
for(int pos:position){
if(pos%2){
odd++;
}else{
even++;
}
}
return min(odd,even);
}
};