LeetCode 719.找出第K小的数对距离

数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。

给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 <= i < j < nums.length 。返回 所有数对距离中 第 k 小的数对距离。

示例 1:

输入:nums = [1,3,1], k = 1

输出:0

解释:数对和对应的距离如下:

(1,3) -> 2

(1,1) -> 0

(3,1) -> 2

距离第 1 小的数对是 (1,1) ,距离为 0 。

示例 2:

输入:nums = [1,1,1], k = 2

输出:0

示例 3:

输入:nums = [1,6,1], k = 3

输出:5

提示:

n == nums.length

2 <= n <= 104^44

0 <= nums[i] <= 106^66

1 <= k <= n * (n - 1) / 2

二分答案,二分下界为0,上界为nums中的最大数对距离,对于二分到的值,查看是否是第k小的数对距离,这可以用滑动窗口来计算:

cpp 复制代码
class Solution {
public:
    int smallestDistancePair(vector<int>& nums, int k) {
        ranges::sort(nums);

        int l = 0;
        int r = nums[nums.size() - 1] - nums[0];

        int ans = 0;

        while (l <= r) {
            int m = l + (r - l) / 2;

            int num = 0;

            int left = 0;
            int right = 0;
            while (right < nums.size()) {
                while (nums[right] - nums[left] > m) {
                    ++left;
                }

                num += right - left;
                ++right;

                if (num >= k) {
                    break;
                }
            }

            if (num >= k) {
                ans = m;
                r = m - 1;
            } else {
                l = m + 1;
            }
        }

        return ans;
    }
};

如果二分的上下界之差为n,nums的长度为m,则此算法时间复杂度为O(m(logm+logn)),空间复杂度为O(logm)。

相关推荐
数据皮皮侠AI1 天前
顶刊同款!中国地级市风灾风险与损失数据集(2000-2022)|灾害 / 环境 / 经济研究必备
大数据·人工智能·笔记·能源·1024程序员节
Fab1an2 天前
Busqueda——Hack The Box 靶机
linux·服务器·学习·1024程序员节
技术专家3 天前
Stable Diffusion系列的详细讨论 / Detailed Discussion of the Stable Diffusion Series
人工智能·python·算法·推荐算法·1024程序员节
学传打活5 天前
古代汉语是源,现代汉语是流,源与流一脉相承。
微信公众平台·1024程序员节·汉字·中华文化
学传打活10 天前
【边打字.边学昆仑正义文化】_19_星际生命的生存状况(1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
unable code17 天前
[HNCTF 2022 WEEK2]ez_ssrf
网络安全·web·ctf·1024程序员节
unable code18 天前
[NISACTF 2022]easyssrf
网络安全·web·ctf·1024程序员节
unable code19 天前
BUUCTF-[第二章 web进阶]SSRF Training
网络安全·web·ctf·1024程序员节
开开心心就好20 天前
进程启动瞬间暂停工具,适合调试多开
linux·运维·安全·pdf·智能音箱·智能手表·1024程序员节
仰泳之鹅21 天前
【51单片机】第一课:单片机简介与软件安装
单片机·嵌入式硬件·51单片机·1024程序员节