คำชี้แจงปัญหา
กำหนดชุดของจำนวนเต็ม n จำนวน ดำเนินการตามจำนวนขั้นต่ำ (คุณสามารถแทรก/ลบองค์ประกอบใน/จากชุด) เพื่อทำให้ MEX ของชุดมีค่าเท่ากับ x (ที่ให้มา)
หมายเหตุ − MEX ของชุดจำนวนเต็มคือจำนวนเต็มที่ไม่ติดลบขั้นต่ำที่ไม่มีอยู่ในนั้น ตัวอย่างเช่น MEX ของเซต {0, 2, 4} คือ 1 และ MEX ของเซต {1, 2, 3} คือ 0
ตัวอย่าง
ถ้า n =5 และ x =3 และอาร์เรย์เป็น {0, 4, 5, 6, 7} เราจำเป็นต้องมีการดำเนินการขั้นต่ำ 2 ครั้ง
อัลกอริทึม
- แนวทางคือการเห็นว่าในชุดสุดท้ายองค์ประกอบทั้งหมดที่น้อยกว่า x ควรมี x ไม่ควรมีอยู่ และองค์ประกอบใดๆ ที่มากกว่า x ไม่สำคัญ
- ดังนั้น เราจะนับจำนวนองค์ประกอบที่น้อยกว่า x ซึ่งไม่มีอยู่ในชุดเริ่มต้นและเพิ่มลงในคำตอบ
- ถ้ามี x เราจะบวก 1 ให้กับคำตอบเพราะ x ควรถูกลบออก
ตัวอย่าง
#include <iostream>
using namespace std;
int getMinOperations(int *arr, int n, int x) {
int k = x, i = 0;
while (n--) {
if (arr[n] < x) {
--k;
}
if (arr[n] == x) {
++k;
}
}
return k;
}
int main() {
int arr[] = {0, 4, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]); int x = 3;
cout << "Minimum required operations = " << getMinOperations(arr, n, x) << endl;
return 0;
} ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -
Minimum required operations = 2