Работа с M вхождениями из N

Вопрос мне задали на собеседовании. Я был близок к решению, но, к сожалению, не решил его.

Предположим, у нас есть последовательность, содержащая N чисел типа long . И мы точно знаем, что среди этой последовательности каждое число встречается ровно n раз, за ​​исключением одного числа, которое встречается ровно m раз ( 0 < m < n ). Как найти это число с помощью O (N) операций и O (1) дополнительной памяти?

В простейшем случае (когда n = 2 и m = 1 ) все, что нам нужно сделать, это просто выполнить накопительное xor для каждого числа в последовательности. Результат будет равен желаемому числу. Но я застрял, пытаясь разобраться с произвольными m и n .

Я был бы признателен за фактическое решение C ++.


РЕДАКТИРОВАТЬ: Мы знаем фактические значения ] m и n априори.

Пример. Мы знаем, что n = 3 и m = 2. Последовательность ( N = 8 ) есть

5 11 5 2 11 5 2 11

И правильный ответ равно 2 в данном конкретном случае, потому что это встречается только дважды.

21
задан eeerahul 5 October 2011 в 16:03
поделиться