import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* @author xnl
* @Description:
* @date: 2022/6/15 21:36
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
int[] nums = {1,3,1};
System.out.println(solution.smallestDistancePair(nums, 1));
}
public int smallestDistancePair(int[] nums, int k) {
Arrays.sort(nums);
int n = nums.length, left = 0, right = nums[n - 1] - nums[0];
while (left <= right){
int mid = (left + right) >> 1;
int cnt = 0;
for (int i = 1; i < n; i++){
cnt += i - binarySearch(nums, i, nums[i] - mid);
}
if (cnt >= k){
right = mid -1;
} else {
left = mid + 1;
}
}
return left;
}
private int binarySearch(int[] nums, int end, int target){
int left = 0, right = end;
while (left <= right){
int mid = (left + right) >> 1;
if (nums[mid] >= target ){
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
}
}
力扣:719. 找出第 K 小的数对距离
最新推荐文章于 2025-12-05 21:56:57 发布
本文介绍了一种使用Java实现的最小距离配对问题解决方案,通过归并排序和二分查找,找到数组中元素之间的最短距离,以满足特定条件。重点在于排序和搜索算法的应用。
462

被折叠的 条评论
为什么被折叠?



