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