在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