LeetCode 719. 找出第 k 小的距离对 (Java)
题目:
给定一个整数数组,返回所有数对之间的第 k 个最小距离。一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值。
示例 1:
输入:
nums = [1,3,1]
k = 1
输出:0
解释:
所有数对如下:
(1,3) -> 2
(1,1) -> 0
(3,1) -> 2
因此第 1 个最小距离的数对是 (1,1),它们之间的距离为 0。
提示:
2 <= len(nums) <= 10000.
0 <= nums[i] < 1000000.
1 <= k <= len(nums) * (len(nums) - 1) / 2.
分析:
通过对数组排序,我们知道第k小距离一定是在0到nums数组中最大值和最小值差值之间。基于这个条件我们可以通过二分法来计算,通过计算距离对的数量和k的关系,来修改二分搜索的边界,最后求的结果。
在计算数组中距离对时可以使用双指针,由于数组是有序的,i,j从0开始,当nums[j] - nums[i]的值大于我们给的距离m时,则小于m的距离对数就是j-i。不断移动i和j直到数组的末尾,将距离对数累加起来。
当距离对数count小于k时,意味着我们求的m较小,此时需要调整左边界,反之,则调整右边界。
程序:
class Solution {
public int smallestDistancePair(int[] nums, int k) {
Arrays.sort(nums);
int l = 0, r = nums[nums.length-1] - nums[0];
while(l < r){
int mid = l + (r - l) / 2;
int count = 0;
//compute number of pairs with distance <= mid
int i = 0;
for(int j = 0; j < nums.length; ++j){
while(nums[j] - nums[i] > mid){
i++;
}
count += j - i;
}
if(count < k){
l = mid+1;
}else{
r = mid;
}
}
return l;
}
}
LeetCode 719. 找出第 k 小的距离对 (Java)的更多相关文章
- Java实现 LeetCode 719 找出第 k 小的距离对(二分搜索法+二分猜数字)
719. 找出第 k 小的距离对 给定一个整数数组,返回所有数对之间的第 k 个最小距离.一对 (A, B) 的距离被定义为 A 和 B 之间的绝对差值. 示例 1: 输入: nums = [1,3, ...
- 719. 找出第 K 小的数对距离
719. 找出第 K 小的数对距离 这道题其实有那么一点二分猜答案的意思,也有很多类似题目,只不过这道题确实表达的不是很清晰不容易想到,题没问题,我的问题.既然是猜答案,那么二分边界自然就是距离最大值 ...
- [Swift]LeetCode719. 找出第 k 小的距离对 | Find K-th Smallest Pair Distance
Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pai ...
- 海量数据中找出前k大数(topk问题)
海量数据中找出前k大数(topk问题) 前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小 ...
- OpenJudge计算概论-找出第k大的数
/*================================================ 找出第k大的数 总时间限制: 1000ms 内存限制: 1000kB 描述 用户输入N和K,然后接 ...
- 刷题-力扣-1738. 找出第 K 大的异或坐标值
1738. 找出第 K 大的异或坐标值 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-kth-largest-xor-co ...
- Gym 101064 D Black Hills golden jewels 【二分套二分/给定一个序列,从序列中任意取两个数形成一个和,两个数不可相同,要求求出第k小的组合】
D. Black Hills golden jewels time limit per test 2 seconds memory limit per test 256 megabytes input ...
- 【基础算法】排序-复杂排序之二(找出第K大的数)
切割的思想是高速排序最精髓的地方.每一次切割出来的元素K一个排在第K位,所以利用这样的思想我们至少知道3点 1. 被切割出来的元素K最后一定排在第K位. 2. 在K左边的元素一定比K小或者相等. 3. ...
- 1738. 找出第 K 大的异或坐标值
2021-05-19 LeetCode每日一题 链接:https://leetcode-cn.com/problems/find-kth-largest-xor-coordinate-value/ 标 ...
- LeetCode 5071. 找出所有行中最小公共元素(Java)
题目:5071. 找出所有行中最小公共元素 给你一个矩阵 mat,其中每一行的元素都已经按 递增 顺序排好了.请你帮忙找出在所有这些行中 最小的公共元素. 如果矩阵中没有这样的公共元素,就请返回 -1 ...
随机推荐
- HarmonyOS NEXT应用开发—自定义视图实现Tab效果
介绍 本示例介绍使用Text.List等组件,添加点击事件onclick,动画,animationTo实现自定义Tab效果. 效果预览图 使用说明 点击页签进行切换,选中态页签字体放大加粗,颜色由灰变 ...
- 六年团队Leader实战秘诀|程序员最重要的八种软技能
简介:笔者在带团队的六年中发现,程序员们在职场都有一个共同的困扰:"好像写代码都没什么问题了,日常工作基本上都是应付业务需求的开发,好像找不到其他的更大的附加价值了,我应该找一些什么样的发 ...
- Apsara Stack 技术百科 | 浅谈阿里云混合云新一代运维平台演进与实践
简介:随着企业业务规模扩大和复杂化及云计算.大数据等技术的不断发展,大量传统企业希望用上云来加速其数字化转型,以获得虚拟化.软件化.服务化.平台化的红利.在这个过程中,因为软件资产规模持续增大而导致 ...
- E百科 | 第2期 扒一扒能加速互联网的QUIC协议
简介: 众所周知,QUIC(Quick UDP Internet Connection)是谷歌制定的一种互联网传输层协议,它基于UDP传输层协议,同时兼具TCP.TLS.HTTP/2等协议的可靠性与安 ...
- 02 Orcad设计环境讲解与工程创建
02 Orcad设计环境讲解与工程创建 学习目标: 1) 掌握Orcad软件绘制元件库以及原理图的方法: 2) 掌握Allegro软件绘制PCB库以及PCB的方法: 3) 掌握Orca ...
- 接私活利器!推荐一个基于SpringBoot3的后台管理框架
大家好,我是 Java陈序员. 今天,给大家推荐一个后台管理框架,适合二次定制开发.接私活.源码学习等场景. 关注微信公众号:[Java陈序员],获取开源项目分享.AI副业分享.超200本经典计算机电 ...
- SpringMVC学习四(文件上传/拦截器)
1.文件上传 1.1预备工作,需要两个jar包(Fileupload) jar包下载路径: [点击下载https://github.com/suyirulan/putao/tree/master/fi ...
- 一个用Python将视频变为表情包的工具
这是一个将视频转变为表情包的工具,现实生活中当我们看到一段搞笑的视频,我们可以将这段视频喂给这段程序,生成gif表情包,这样就可以用来舍友斗图了 1.一些限制 1.这个程序不能转化超过15秒以上的视频 ...
- hutool QrCodeUtil解析二维码出现NotFoundException
解析部分二维码时出现com.google.zxing.NotFoundException:null,解析失败的二维码手机扫是能正常打开的,后面发现这个问题是因为原二维码图片太大了,将图片缩小后正常解析 ...
- Prompt提示词助力AI写作
AI以极高的效率和还可以的输出质量,得到了许多写作人的青睐,Prompt作为AI写作的核心,通过简短的提示来引导AI生成文本,让写作新手也能轻松自如. 1. 看不下去的行业乱状 让人不禁遗憾的是,国外 ...