2014-11-24 2 views
2

정수 배열이 제공됩니다. 이 배열에서 3 개의 고유 번호는 짝수로 발생합니다. 나머지는 한 번만 발생합니다. XOR 논리를 사용하여 그 숫자를 찾는 방법이 있습니까? 또한 주어진 배열은 n + 3 요소로 구성됩니다. 배열의 모든 요소는 범위 1에서 n까지입니다. 예 용발생 수가 짝수 인 세 개의 고유 번호를 찾으려면

: 도착 = {4, 2, 4, 5, 2, 3, 1, 5} 여기서 n = 짝수 발생 5 개 여기 고유 번호 2, 4, 5

I했던 된 범위 번호 1 ~ n의 xor와 함께 배열 번호의 XOR. 그 숫자는 마지막 세 고유 번호의 XOR에 대한 답입니다. 두 개의 숫자가있는 경우 설정된 비트를 확인하고 숫자를 찾습니다. 그러나 3 개의 숫자는 어떨까요? 이것을 할 수있는 방법이 있습니까?

해시를 사용하여 문제를 해결할 수 있습니다. 문제를 해결하기 위해 XOR 방식을 찾고 있습니다.

때문에이 Xor는 당신을 도울 수
+1

[이 비슷한 대답을 사용할 수 있다고 생각합니다.] (http://stackoverflow.com/a/3010534/1009831). 좋은 설명과 함께 선형 시간 O (1) 공간 (일정한 배열로) 알고리즘을 제공합니다. –

+0

예 그 접근 방식을 약간 수정하면 효과가 있다고 생각합니다. 시도해 보겠습니다. – rocker

답변

-1

: 당신이 무엇을 할 수 있는지 그래서

XOR (Exclusive Or) truth table: 
      A B XOR 
      0 0 0 
      1 0 1 
      0 1 1 
      1 1 0 

: 당신이 그것을 반환 할 수 있습니다 이전 세트의 크기는 세 가지의 경우에 비해 단지 3 개의 숫자가 원하는 경우

A. Divide the elements that are occurring more than ones to sets 
    of the same value 
B. Then xor all elements in each of those sets 
C. If the result is zero than you can return that element to the end set 

이 논리를 사용하여 그룹의 짝수 개의 요소를 계산할 수 있습니다.

+0

단계 A로 각 번호에 대해 별도의 버킷을 만드는 것을 의미합니까? 해싱처럼 보입니다. – rocker

+0

{{4,4}, {5,5}, {2,2}, {1}, {3}} 이러한 작은 데이터를 해시 할 필요가 없습니다. 단순히 그룹 반복을 허용하는 데이터 구조를 사용할 수 있습니다. 세트는 때때로 반복을 허용하지 않습니다. 이 하나 할. 배열 배열이 여기에서 작동합니다 – sivi

+0

n (공간 복잡성) 일 수있는 추가 데이터 구조를 사용하고 있습니다. 그것은 해싱 사용과 같은 경우입니다. – rocker

관련 문제