Вопрос: Задано N целых чисел [N < = 10^5], посчитайте полные пары целых чисел, которые имеют разность K. [K> 0 и K < 1e9]. Каждое из N целых чисел будет больше 0 и, по крайней мере, K от 2^31-1 (все может быть выполнено с 32-битными целыми числами).Самый быстрый алгоритм для выбора пар чисел
1-я строка содержит N & K (целые числа). Вторая строка содержит N номеров набора. Все номера N гарантированы, чтобы быть отличным.
Теперь вопрос от hackerrank. У меня есть решение для вопроса, но оно не удовлетворяет предельному сроку для всех тестовых примеров. Я не уверен, можно ли использовать другой алгоритм, но у меня нет идей. Пойду, если кто-то потратит немного времени, чтобы проверить мой код и дать чаевые или два.
temp = input()
temp = temp.split(" ")
N = int(temp[0])
K = int(temp[1])
num_array = input()
num_array = num_array.split(" ")
diff = 0
pairs= 0
i = 0
while(i < N):
num_array[i] = int(num_array[i])
i += 1
while(num_array != []):
j = 0
while(j < (len(num_array)-1)):
diff = abs(num_array[j+1] - num_array[0])
if(diff == K):
pairs += 1
j += 1
del num_array[0]
if(len(num_array) == 1):
break
print(pairs)
Хорошо. Вопрос в том, есть ли у u заданный ряд значений, найдите общее число пар чисел с разностью k. Например. Если u имеет 5 чисел: 1 3 5 2 7 ... и k = 2, пары: (1,3) (3,5) (5,7). В моем случае я проверяю первое число (в примере выше, «1») на все остальные значения. Если разница существует, я добавляю 1 к окончательному answer.i, затем делаю то же самое для следующего значения (опустив ранее проверенное число). Можете ли вы объяснить свой путь немного лучше? –
@Nwaiwu - здесь нечего объяснять - предлагаемый подход ismply проходит через каждый элемент и проверяет, существует ли какой-либо элемент с разницей 'k'. Весь «трюк» заключается в том, что эта проверка может выполняться в постоянное время (с использованием хэш-набора) вместо линейного времени (путем циклирования - как в вашем решении). – lejlot
@lejlot: Большое спасибо. Это сработало :) . Еще одна вещь: то, что означало u, означает, что «можно делать в постоянное время (используя хэш-набор) вместо линейного времени (путем циклизации - как в вашем решении)». Я раньше не использовал set() в python, так как это быстрее? –