Computer >> Máy Tính >  >> Lập trình >> C ++

Các phép toán tối thiểu để làm cho MEX của tập hợp đã cho bằng x trong C ++

Tuyên bố vấn đề

Cho một tập hợp n số nguyên, hãy thực hiện số phép toán tối thiểu (bạn có thể chèn / xóa các phần tử vào / khỏi tập hợp) để làm cho MEX của tập hợp bằng x (đã cho).

Lưu ý - MEX của một tập hợp các số nguyên là số nguyên không âm tối thiểu không tồn tại trong tập hợp đó. Ví dụ:MEX của tập hợp {0, 2, 4} là 1 và MEX của tập hợp {1, 2, 3} là 0

Ví dụ

Nếu n =5 và x =3 và mảng là {0, 4, 5, 6, 7} thì chúng ta yêu cầu tối thiểu 2 phép toán

Thuật toán

  • Cách tiếp cận là để thấy rằng trong tập hợp cuối cùng, tất cả các phần tử nhỏ hơn x sẽ tồn tại, x không nên tồn tại và bất kỳ phần tử nào lớn hơn x không quan trọng.
  • Vì vậy, chúng tôi sẽ đếm số phần tử nhỏ hơn x không tồn tại trong tập hợp ban đầu và thêm phần tử này vào câu trả lời.
  • Nếu x tồn tại, chúng tôi sẽ thêm 1 vào câu trả lời vì x cần được xóa.

Ví dụ

#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;
}

Đầu ra

Khi bạn biên dịch và thực thi chương trình trên. Nó tạo ra kết quả sau -

Minimum required operations = 2