1679. Max Number of K-Sum Pairs
Содержание
Задача
Вам дан массив чисел nums
и целое число k
. Задача — найти максимальное количество пар в массиве, сумма элементов которых равна k
.
Подсказки
Используйте технику двух указателей(pointers) после сортировки массива для оптимизации поиска пар.
Подход
Центральная идея решения задачи заключается в использовании техники двух указателей для быстрого нахождения пар чисел с заданной суммой k
. Прежде чем применить эту технику, массив сортируется в возрастающем порядке. Затем создаются два указателя: один, указывающий на начало массива, и второй — на конец. Двигая эти указатели в зависимости от суммы элементов, на которые они указывают, мы можем найти все пары с суммой k
.
Алгоритм
- Отсортируйте массив в возрастающем порядке.
- Инициализируйте два указателя:
p1
на начало массива иp2
на конец. - Пока
p1
меньшеp2
:- Если
nums[p1] + nums[p2]
равноk
, увеличьте счетчик на 1, и сдвиньте оба указателя. - Если сумма меньше
k
, сдвиньтеp1
вправо. - Если сумма больше
k
, сдвиньтеp2
влево.
- Если
Решение
def maxOperations(nums, k) -> int:
c = 0
p1 = 0
p2 = len(nums) - 1
nums.sort()
while p1 < p2:
s = nums[p1] + nums[p2]
if s == k:
c += 1
p1 += 1
p2 -= 1
elif s < k:
p1 += 1
else:
p2 -= 1
return c