Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 하나를 제외하고 모든 요소가 k번 발생하는 배열의 고유 요소

<시간/>

배열 A가 있습니다. A는 모든 요소가 m번 발생하지만 한 요소는 한 번만 발생합니다. 그 고유한 요소를 찾아야 합니다.

따라서 입력이 A =[6, 2, 7, 2, 2, 6, 6], m =3인 경우 출력은 7이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • INT_SIZE :=8 * 정수형 변수의 크기
  • 배열 개수 정의:INT_SIZE. 0으로 채우기
  • 초기화 i의 경우:=0, i
  • j 초기화의 경우 :=0, j <크기일 때 업데이트(j를 1만큼 증가), −
    • (arr[j] AND 2^i)가 0과 같지 않으면 -
      • count[i] :=count[i] + 1
    • res :=0
  • 초기화 i의 경우:=0, i
  • res :=res + ((count[i] mod m) * 2^i)
  • 반환 결과
  • 이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    예시(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);
    }

    입력

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

    출력

    5