Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เล่นกับชิปใน C++


สมมติว่ามีชิปอยู่บ้าง ชิปตัวที่ i อยู่ที่ตำแหน่งชิป[i] เราสามารถดำเนินการใด ๆ ของการดำเนินการสองประเภทต่อไปนี้ได้หลายครั้งตามที่เราต้องการ (อาจเป็นศูนย์) บนชิปใด ๆ -

  • ย้ายชิปตัวที่ i 2 หน่วยไปทางซ้ายหรือทางขวาด้วยราคา 0

  • ย้ายชิปตัวที่ i 1 หน่วยไปทางซ้ายหรือทางขวาโดยมีราคา 1 หน่วย

ในขั้นต้น อาจมีชิปตั้งแต่สองตัวขึ้นไป เราต้องคืนต้นทุนขั้นต่ำที่จำเป็นในการย้ายชิปทั้งหมดไปยังตำแหน่งเดียวกัน ตำแหน่งสุดท้ายสามารถเป็นอะไรก็ได้ ดังนั้นหากอาร์เรย์ของชิปเริ่มต้นคือ [2,2,2,3,3] ผลลัพธ์จะเป็น 2 ทั้งชิปที่สี่และห้าจะถูกย้ายไปยังตำแหน่งที่สองโดยมีค่าใช้จ่าย 1 ดังนั้นต้นทุนขั้นต่ำทั้งหมดจะเท่ากับ 2

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • คี่ :=0 และคู่ :=0

  • สำหรับฉันอยู่ในช่วง 0 ถึงความยาวของอาร์เรย์

    • ถ้าชิป[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