在C ++中玩筹码

假设有一些芯片,第i个芯片当前位于位置芯片[i]。我们可以在任意芯片上任意多次执行以下两种操作中的任何一种(可能为零)-

  • 将第i个芯片以0的成本向左或向右移动2个单位。

  • 将第i个芯片以1单位向左或向右移动,成本为1。

最初,可以有两个或多个芯片。我们必须返回将所有芯片移至同一位置所需的最低成本。最终位置可以是任何东西。因此,如果初始芯片的数组为[2,2,2,3,3],则输出将为2。第四个和第五个芯片都将以成本1移到位置2。因此,总的最低成本为2

为了解决这个问题,我们将遵循以下步骤-

  • 奇数:= 0偶数:= 0

  • 对于范围从0到数组长度的i

    • 如果chips [i]是奇数,则增加奇数,否则增加偶数

  • 返回最小的奇数和偶数。

范例(C ++)

让我们看下面的实现以更好地理解-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int minCostToMoveChips(vector<int>& chips) {
      int odd =0;
      int even = 0;
      for(int i =0;i<chips.size();i++){
         if(chips[i]&1)odd++;
         else even++;
      }
      return min(odd,even);
   }
};
main(){
   Solution ob;
   vector<int> v1 = {2,2,2,3,3};
   cout << ob.minCostToMoveChips(v1);
}

输入值

[2,2,2,3,3]

输出结果

2