在 C++ 中玩芯片
假设有若干个芯片,第 i 个芯片当前的位置为 chips[i]。我们可以在任何一个芯片上执行以下两种类型的操作任意多次(可能为零次) −
将第 i 个芯片向左移动 2 个单位或向右移动 2 个单位,花费为 0。
将第 i 个芯片向左移动 1 个单位或向右移动 1 个单位,花费为 1。
一开始,可能有两个或更多个芯片。我们必须返回将所有芯片移动到同一位置所需的最小花费。最终位置可以是任意位置。因此,如果初始的芯片数组为 [2,2,2,3,3],则输出将为 2。第四个和第五个芯片均将以花费 1 移动到位置二。因此,总最小花费将为 2
要解决此问题,我们将遵循以下步骤 −
odd := 0 且 even := 0
对于从 0 到数组长度的 i
如果 chips[i] 为奇数,则增加 odd,否则增加 even
返回 odd 和 even 的最小值。
示例 (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
广告