2015-09-01 1 views
0

Я наткнулся на вопрос интервью:Есть ли правило большого пальца, чтобы решить, использовать ли логические операторы или нет?

У нас есть номера от 1 до n в любом порядке. Мы начинаем помещать эти числа в любом порядке в размер массива n-1. Это означает, что будет один номер, который не был бы введен в массив. Мы должны это найти.

Простое решение:

a = [4, 2, 3, 1, 5, 7] 
n = 7 
print sum(range(1, n+1)) - sum(a) ## prints 6 

Одно решение, которое я нашел в интернете:

  • XOR все элементы из 1 ВЗ п и магазин к X1

  • исключающее все элементы массива и хранить до X2

  • отсутствует элемент = X1 XOR X2

Код, который я сделал это:

print reduce(lambda a, b: a^b, range(1, n+1))^reduce(lambda a, b: a^b, a) ## prints 6 

Никоим образом второй метод был интуитивно понятным для меня. Существуют ли конкретные варианты использования, когда логические операторы применяются таким образом?

+0

Это правильно, хотя это очень странный способ сделать это. Просто для ясности: это побитовый оператор, а не логический оператор (который будет работать на правдивость значения). – spectras

ответ

1

Просто для удовольствия: есть другой способ решить эту проблему, используя хорошо известный formula:

n*(n+1)/2 - sum(a) 
=> 6 

И отвечая на ваш вопрос: нет, это не хороший случай использования за злоупотребление bitwise operators между целыми числами (не логические операторы, потому что значения не являются логическими!) таким образом, что он полностью скрывает намерение кода. Придерживайтесь арифметического, интуитивного решения. Используйте побитовые операторы, когда возникает необходимость манипулировать целыми числами как двоичные значения.

+1

Это еще лучше. Но это решение «xor» не входит в стоимость. Являются ли эти решения результатом хитов и испытаний? Я сомневаюсь, что кто-нибудь придумает это в интервью !!! –

+0

Нет, это хорошо известное свойство xor. Он используется, например, для RAID5 (один диск хранит xored-содержимое других дисков, что позволяет восстанавливать данные, если один из дисков ломается). – spectras

0

Побитовые операции, особенно XOR, важны и могут избежать переполнений в этом интервью. XOR также является основой многих алгоритмов крипто/контрольной суммы. here - хорошее видео, в котором рассказывается о битовых операциях (видео ссылка скопирована с InterviewBit).

 Смежные вопросы

  • Нет связанных вопросов^_^