สมมติว่ามีชิปอยู่บ้าง ชิปตัวที่ 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