[LeetCode]玩筹码MinCostToMoveChips1217

/*
    数轴上放置了一些筹码,每个筹码的位置存在数组 chips 当中。
        你可以对 任何筹码 执行下面两种操作之一(不限操作次数,0 次也可以):

        将第 i 个筹码向左或者右移动 2 个单位,代价为 0。
        将第 i 个筹码向左或者右移动 1 个单位,代价为 1。
        最开始的时候,同一位置上也可能放着两个或者更多的筹码。

        返回将所有筹码移动到同一位置(任意位置)上所需要的最小代价。
        示例 1:

        输入:chips = [1,2,3]
        输出:1
        解释:第二个筹码移动到位置三的代价是 1,第一个筹码移动到位置三的代价是 0,总代价为 1。
        示例 2:

        输入:chips = [2,2,2,3,3]
        输出:2
        解释:第四和第五个筹码移动到位置二的代价都是 1,所以最小总代价为 2。      
        提示:

        1 <= chips.length <= 100
        1 <= chips[i] <= 10^9

在数轴上有一些砝码,输入他们的位置,找到移动的最小代价。
其中偶数位置的到偶数位置的没有代价,奇数到奇数位置的没有代价(比如位置1到位置3不需要代价,2到4也不需要)
那么在这个条件下就可以把所有奇数位置的砝码放到一个位置上(比如1,3,5三个位置上有一堆砝码,你可以全部堆在3位置上,反正不需要代价)
于是在没有代价的情况下,我们就可以把所有偶数位置的砝码和奇数位置的砝码摆到连续的位置上

其次,奇数到偶数和偶数到奇数的移动一个砝码就需要1代价
于是再比较两者中谁的数量比较少,少的一侧有多少砝码就是对应的总代价。

到这里,这个题就转换成了:遍历一次数组,找到其中有多少个奇数和偶数位置的砝码,取其中比较少的,就是答案

*/
 

public class MinCostToMoveChips1217 {
    public int minCostToMoveChips(int[] chips) {
        if (chips ==null ||chips.length < 2){
            return 0;
        }
        int index0=0;
        int index1=0;
        for (int n:chips) {
            if (n % 2==0) {
                index0++;
            }else {
                index1++;
            }
        }
        return index0 < index1 ? index0 : index1;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值