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