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

Phần tử duy nhất trong một mảng mà tất cả các phần tử xuất hiện k lần ngoại trừ một phần tử trong C ++

ta có mảng A. A có tất cả các phần tử xảy ra m lần, nhưng một phần tử chỉ xảy ra một lần. Chúng tôi phải tìm ra yếu tố độc đáo đó.

Vì vậy, nếu đầu vào là A =[6, 2, 7, 2, 2, 6, 6], m =3, thì đầu ra sẽ là 7.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • INT_SIZE:=8 * kích thước của một biến kiểu số nguyên
  • Xác định số lượng mảng có kích thước:INT_SIZE. và điền bằng 0
  • để khởi tạo i:=0, khi tôi
  • để khởi tạo j:=0, khi j
  • nếu (arr [j] AND 2 ^ i) không bằng 0, thì -
    • count [i]:=count [i] + 1
  • res:=0
  • để khởi tạo i:=0, khi tôi
  • res:=res + ((count [i] mod m) * 2 ^ i)
  • trả lại res
  • Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    Ví dụ (C ++)

    #include <bits/stdc++.h>
    using namespace std;
    int selectUnique(unsigned int arr[], int size, int m){
       int INT_SIZE = 8 * sizeof(unsigned int);
       int count[INT_SIZE];
       memset(count, 0, sizeof(count));
       for(int i = 0; i < INT_SIZE; i++)
          for(int j = 0; j < size; j++)
             if((arr[j] & (1 << i)) != 0)
                count[i] += 1;
       unsigned res = 0;
       for(int i = 0; i < INT_SIZE; i++)
          res += (count[i] % m) * (1 << i);
       return res;
    }
    main(){
       unsigned int arr[] = { 6, 2, 5, 2, 2, 6, 6 };
       int size = sizeof(arr) / sizeof(arr[0]);
       int m = 3;
       cout << selectUnique(arr, size, m);
    }

    Đầu vào

    { 6, 2, 5, 2, 2, 6, 6 }

    Đầu ra

    5