Пример:
Ввод: N = 5, M = 3 A = [6, 5, 7, 1, 3] B = [2, 4, 8] Вывод: 2 0 2 1 2 2 3 0 4 0 1 0 0 0 Нам нужно сформировать 5 + 3 - 1 = 7 пар. Эти пары: (7, 2), (7, 4), (7, 8), (1, 2), (3, 2), (5, 2), (6, 2) Все имеют уникальную сумму
Подход грубой силы: мы можем запустить цикл для обоих массивов A и B, чтобы найти первые N + M-1 пары уникальных сумм и вывести их индексы по пути.< br>Чтобы проверить, была ли использована определенная сумма, мы создаем словарь Python Bool. Если значение словаря для этой суммы равно False, это означает, что это новое значение суммы. Если true, сумма уже использована.
Код:
из
коллекций
import
defaultdict as dd
# Функция для генерации уникальных пар сумм
def
unique_pairs ():
# Python Bool Dictionary
d
=
dd (
bool
)
ct
=
0
# Для каждого элемента A найти
# уникальная сумма пары в B. Break
# цикл после N + M-1 пар
for
i
in
диапазон
(n):
для
j
in
range
(m):
if
(ct
=
=
n
+
m
-
1
):
break
sm
=
a [i]
+
b [j]
if
(d [sm]
=
=
False
):
d [sm]
=
True
ct
+
=
1
print
(i, j)
n, m
=
6
,
4
a <класс кода = "ключевое слово"> = <код e class = "plain"> [
6
,
4
,
3
,
5
,
8
,
2
]
b
=
[
3
,
5
,
4
,
2
]
unique_pairs ()
Вывод:
0 0 0 1 0 2 0 3 1 0 1 3 2 3 4 1 4 2
Временная сложность: потому что мы просматриваем массив, используя вложенные циклов, временная сложность оказывается O ().
Эффективный подход: как только мы будем сортировать оба массива, сначала мы можем создать N пар уникальных сумм, соединив все элементы массива A с первым элементом массива B, а затем соединив остальные M — 1 элемент массива B с последним элементом массива A.
Код:
из
коллекций
import
defaultdict as dd
# Функция для генерации уникальных пар сумм
def
unique_pairs_sort ():
# Словарь Python Int
da
=
dd (
int
)
db
=
dd (
int
)
# Создать словарь для хранения индекса
f или
i
in
range
(n):
da [a [i]]
=
i
для
i
in
range
(m):
db [b [i]]
=
i
# Сортировка массивов
a.sort(); b.sort ()
# N пар A с B [0]
for
i
in
range
(n):
print
( da [a [i] ], db [b [
0
]])
# M-1 пары B с A [N-1]
for
i
in
range
(
1
, m):
print
(da [a [
-
1
]], db [b [i]])
n, m
=
6
,
4
a
=
[
6
,
4
,
3
,
5
,
8
,
2
]
b
=
[
3
,
5
,
4
,
2
]
unique_pairs_sort ()
Выход:
5 3 2 3 1 3 3 3 0 3 4 3 4 0 4 2 4 1
Временная сложность: Сложность для этого равна времени, которое требуется для сортировки: O (n Log n).
Сложность пространства: потому что мы используем две разные карты/словари для хранения индексов массива. Временная сложность будет O (n + m), где n — размер первого массива и m — размер второго массива.