2014-11-15 4 views
0

우리는 n 배열을 가지고 있습니다.이 배열은 모두 하나만 제외하고이 배열에서 균등하게 반복되었습니다. 우리는 홀수 번 반복되는 번호를 찾고 싶습니다.이것에 대한 탐욕적인 접근 방식은 무엇입니까?

나는 최적의 알고리즘이 O(n Log(n))보다 더 복잡하다고 생각한다. 왜냐하면 우리가 배열을 정렬 한 다음 반복 할 수 있고 새로운 수를 볼 수 있기 때문에 누적기를 늘리면 누적기를 감소시키고 누적기를 줄이면 각 누적 기가 0이 아닌 멤버는 홀수 번 반복됩니다.

또한 알고리즘이 O(n)보다 좋지 않다고 생각합니다. 그렇다면 O(Log(n))이어야하고 정렬 된 배열이 필요하지만 초기 배열은 그렇지 않기 때문입니다.

+0

숫자가 정수입니까? (중요합니다.) – Sneftel

+0

'O (n)'공간을 사용하는 것이 좋으면'O (n)'에서 이것을 해결할 수 있습니다 : 숫자 값을 개수와 매핑하는 사전을 생성하십시오. – Dai

+2

BTW, 알고리즘이 'O (n)'보다 좋을 수 없다는 결론에 결함이 있습니다 (결론은 맞지만). – Sneftel

답변

5

숫자가 정수인 경우 배열의 모든 값을 xor 만 사용할 수 있습니다. 결과는 홀수 회 반복되는 번호입니다 (x에 대해 x xor x = 0이므로 올바른 것입니다). 이 알고리즘의 복잡성은 분명히 O(n)입니다.

+0

숫자가 정수가 아닙니다. 실제 숫자이지만 실제 숫자가 xor 또는 xreal이 될 수없는 이유를 이해할 수 없습니까? – user3070752

+0

@amirveyseh 오류 허용 오차없이 부동 소수점 수를 비교하려는 경우 예, 정수로 캐스팅하고 xor로 변환 할 수 있습니다. – kraskevich

+1

@amirveyseh Bitwise-XOR은 고정밀 수레보다 잘 정의되어 있습니다. 기술적으로는 실수에 대해서도 정의되지만, 이러한 연산은 일반적으로 복잡성 이론의 맥락에서 'O (1)'로 간주되지 않습니다. – Sneftel

관련 문제