力扣刷题 1217玩筹码

该篇文章介绍了一种使用贪心算法解决的问题,即在一个给定筹码位置数组中,计算将所有筹码移动到同一偶数或奇数位置所需的最小代价。通过计算初始偶数和奇数位置筹码的数量,返回两者中的较小值作为最小代价。
摘要由CSDN通过智能技术生成

题目:

有 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);
    }
};

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值