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

จำนวนการดำเนินการขั้นต่ำเพื่อทำให้ MEX ของเซตเท่ากับ x ใน C++


ข้อความโจทย์

กำหนดเซตของ 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