719. Найдите K-е наименьшее парное расстояние
Сложность: Сложная
Темы: Массив, Два указателя, Двоичный поиск, Сортировка
Расстояние пары целых чисел a и b определяется как абсолютная разница между a и b.
Для заданного целочисленного массива nums и целого числа k верните kth наименьшее расстояние среди всех пар nums[i] и nums[j], где 0 .
Пример 1:
(1,3) -> 2 (1,1) -> 0 (3,1) -> 2
Тогда первая-я пара наименьших расстояний равна (1,1), а ее расстояние равно 0.
Пример 2:
Пример 3:
Ограничения:
Намекать:
Решение:
Мы можем использовать комбинацию бинарного поиска и метода двух указателей. Вот пошаговый подход к решению этой проблемы:
Сортировка массива: сначала отсортируйте числа массива. Сортировка помогает эффективно вычислить количество пар с расстоянием, меньшим или равным заданному значению.
Двоичный поиск по расстоянию: используйте бинарный поиск, чтобы найти k-е наименьшее расстояние. Пространство поиска расстояний варьируется от 0 (наименьшее возможное расстояние) до max(nums) - min(nums) (максимально возможное расстояние).
Подсчитайте пары с расстоянием ≤ Mid: для каждого среднего значения в двоичном поиске подсчитайте количество пар с расстоянием меньше или равным середине. Это можно эффективно сделать, используя двухточечный подход.
Настройка диапазона двоичного поиска: в зависимости от количества пар с расстоянием, меньшим или равным середине, настройте диапазон двоичного поиска. Если счетчик меньше k, увеличьте нижнюю границу; в противном случае уменьшите верхнюю границу.
Давайте реализуем это решение на PHP: 719. Найдите K-е наименьшее парное расстояние
countPairsWithDistanceLessThanOrEqualTo: эта функция подсчитывает, сколько пар имеют расстояние меньше или равное середине. Он использует два указателя, где правый — текущий элемент, а левый — корректируется до тех пор, пока разница между nums[right] и nums[left] не станет меньше или равна середине.
smallestDistancePair: эта функция использует двоичный поиск для поиска k-го наименьшего расстояния. Низкое и высокое значения определяют текущий диапазон поиска расстояний. Среднее значение проверяется с помощью функции countPairsWithDistanceLessThanOrEqualTo. В зависимости от результата пространство поиска корректируется.
Этот алгоритм эффективно находит k-е наименьшее парное расстояние с временной сложностью O(n log(max(nums) - min(nums)) n log n).
Контактные ссылки
Если эта серия оказалась для вас полезной, поставьте звездочку репозиторию на GitHub или поделитесь публикацией в своих любимых социальных сетях? Ваша поддержка очень много значит для меня!
Если вы хотите больше такого полезного контента, подписывайтесь на меня:
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3