「这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战」。
题目描述:
1217. 玩筹码 - 力扣(LeetCode) (leetcode-cn.com)
有 n 个筹码。第 i 个芯片的位置是 position[i] 。
我们需要把所有筹码移到同一个位置。在一步中,我们可以将第 i 个芯片的位置从 position[i] 改变为:
position[i] + 2或position[i] - 2,此时cost = 0position[i] + 1或position[i] - 1,此时cost = 1返回将所有筹码移动到同一位置上所需要的 最小代价 。
示例一
输入:position = [1,2,3]
输出:1
解释:第一步:将位置3的芯片移动到位置1,成本为0。
第二步:将位置2的芯片移动到位置1,成本= 1。
总成本是1。
示例二
输入: position = [2,2,2,3,3]
输出: 2
解释: 我们可以把位置3的两个芯片移到位置2。每一步的成本为1。总成本= 2。
示例三
输入: position = [1,1000000000]
输出: 1
提示:
1 <= chips.length <= 1001 <= chips[i] <= 10^9
思路分析
遍历
由于将第 i 个筹码向左或者右移动 2 个单位,代价为 0,所以从任意偶数位置移动到另一个偶数位置,代价都为0,同理从任意奇数位置移动到另一个奇数位置的代价也是 0 。
那就分别统计奇数位置和偶数位置的个数,相当于把所有奇数放一起,所有偶数的放一起,然后比较奇数的少还是偶数的少,将少的个数移到多的个数位置上去就可以了。
AC代码
class Solution {
public int minCostToMoveChips(int[] position) {
int odd = 0, even = 0;
for (int i = 0; i < position.length; i++) {
if (position[i] % 2 == 0) {
even++;
} else if (position[i] % 2 != 0) {
odd++;
}
}
return Math.min(even, odd);
}
}