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

C++에서 다른 배열 요소와 빈도가 다른 요소 찾기

<시간/>

N개의 숫자로 구성된 배열이 있다고 가정하고 배열의 각 요소는 하나의 요소를 제외하고 동일한 횟수(m번, 이것도 제공됨)로 나타납니다. 이 요소를 찾아야 합니다.

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

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

  • INT_SIZE :=8 * 정수형 변수의 크기

  • INT_SIZE 크기의 배열 수를 정의합니다. 0으로 채우기

  • initialize i :=0의 경우, i

    • initialize j :=0의 경우 j <크기일 때 업데이트(j를 1만큼 증가), −

      • (arr[j] AND 2^i)가 0과 같지 않으면 -

        • count[i] :=count[i] + 1

      • 해상도 :=0

    • initialize i :=0의 경우, i

      • res :=res + ((count[i] mod m) * 2^i)

    • 반환 해상도

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

#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