Вам задан массив из n
целых чисел a0, a1, .. an
и положительное целое число k
. Найдите и распечатайте количество пар (i,j)
где и i+j
равномерно делится на k
(что составляет i+j % k == 0
). Эта проблема взята из here.Найти делимые суммы пар в массиве в O (n) времени
Нам нужно решение в O(n)
времени.
Объяснение состоит в том, что мы можем сделать это, разделив элементы на ведра в зависимости от их mod k. Например, у вас есть элементы: 1 3 2 6 4 5 9 and k = 3
mod 3 == 0 : 3 6 9
mod 3 == 1 : 1 4
mod 3 == 2 : 2 5
Затем он сказал:
Теперь вы можете сделать пар, как так: Элементы с модник 3 == 0 будет соответствовать с элементами с (3 - 0) мод к = 0, так что другие элементы в списке мод 3 == 0, так как: (3, 6) (3, 9) (6, 9)
Далее:
Там будут n * (n - 1)/2 такие пары, где n - длина списка , потому что список тот же, и i! = J. Элементы с mod 3 == 1 будут совпадать с элементами с (3 - 1) mod k = 2, поэтому элементы в списке mod 3 == 2, например: (1, 2) (1, 5) (4 , 2) (4, 5)
Это имеет смысл, что (3, 6) (3, 9) (6, 9) (all items in the 0th bucket be paired)
поскольку (a + b)% k = 0 = a % k + b % k
.
Не ясно, как другие пары были сгенерированы комбинацией элементов в 1-м (mod 3 == 1) и 2-м (mod 3 == 2) ведро и почему было бы n * (n - 1)/2 пары. Есть ли другой (лучший) метод?
Этот вопрос подходит для Math Stackexchange, о существовании которого я не знал, прежде чем размещать вопрос.
ИМХО, это не Проблема, связанная с Python, но математическая. –
«Тогда сказано:» - * где * следующий текст? Я не вижу этого., –
Вы не указали условие, что i