在 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

更新于: 27-4-2020

292 views

提升你的 职业生涯

通过完成课程获得认证

开始
广告