719. Find K-th Smallest Pair Distance
2017-10-29 11:32
337 查看
Given an integer array, return the k-th smallest distance among all the pairs. The distance of a pair (A, B) is defined as the absolute difference between A and B.
Example 1:
Note:
思路:想到的是:PriorityQueue + pruning
* 还可以怎么优化?二分?Merge sort?
* 就是二分,转化为求差小于k的有多少个(还可以用二分法优化,确定减数是一个循环o(n),然后要找剩下的被减数就只要log(n)也可以双指针)
* 而且题目也有说0 <= nums[i] < 1000000,说明差最多也就1000000
* 暗示用二分就最多20次,虽然说可以最坏情况的复杂度还是可能蛮大的
Example 1:
Input: nums = [1,3,1] k = 1 Output: 0 Explanation: Here are all the pairs: (1,3) -> 2 (1,1) -> 0 (3,1) -> 2 Then the 1st smallest distance pair is (1,1), and its distance is 0.
Note:
2 <= len(nums) <= 10000.
0 <= nums[i] < 1000000.
1 <= k <= len(nums) * (len(nums) - 1) / 2.
思路:想到的是:PriorityQueue + pruning
* 还可以怎么优化?二分?Merge sort?
* 就是二分,转化为求差小于k的有多少个(还可以用二分法优化,确定减数是一个循环o(n),然后要找剩下的被减数就只要log(n)也可以双指针)
* 而且题目也有说0 <= nums[i] < 1000000,说明差最多也就1000000
* 暗示用二分就最多20次,虽然说可以最坏情况的复杂度还是可能蛮大的
package l719; import java.util.Arrays; /* * 想到的是:PriorityQueue + pruning * 还可以怎么优化?二分?Merge sort? * 就是二分,转化为求差小于k的有多少个 * 而且题目也有说0 <= nums[i] < 1000000,说明差最多也就1000000 * 暗示用二分就最多20次,虽然说可以最坏情况的复杂度还是可能蛮大的 * 4000 / class Solution { public int smallestDistancePair(int[] nums, int k) { Arrays.sort(nums); int lo = 0, hi = 1000000; while(lo+1 < hi) { int mid = (lo+hi)/2; if(getDiffLessThan(nums, mid) >= k) hi = mid; else lo = mid; } return lo; } private int getDiffLessThan(int[] nums, int mid) { int ret = 0; for(int i=0; i<nums.length; i++) { int j=i+1; while(j<nums.length && nums[j]-nums[i]<mid) { ret ++; j++; } } return ret; } }
相关文章推荐
- leetcode 719. Find K-th Smallest Pair Distance 第k小的绝对距离 + 暴力计算真棒
- 719. Find K-th Smallest Pair Distance
- LWC 56:719. Find K-th Smallest Pair Distance
- leetcode 719. Find K-th Smallest Pair Distance
- LeetCode Weekly Contest 56 Find K-th Smallest Pair Distance
- Leet 4000 Code Find K-th Smallest Pair Distance
- LEETCODE: 719 Find K-th Smallest Pair Distance
- 算法第15周Find K-th Smallest Pair Distance[hard]
- 719. Find K-th Smallest Pair Distance
- LeetCode719. Find K-th Smallest Pair Distance (hard)
- Find K-th Smallest Pair Distance:查找数组元素中差值第K大的两个元素的差值
- soj4351k-th number pair
- 440. K-th Smallest in Lexicographical Order
- 440. K-th Smallest in Lexicographical Order
- find the th smallest
- HDU-5102-The K-th Distance【思维】【好题】
- leetcode 440. K-th Smallest in Lexicographical Order 第k个字典序的数字+做不出来
- LWC 72: 786. K-th Smallest Prime Fraction
- [LeetCode] K-th Smallest in Lexicographical Order 字典顺序的第K小数字
- Weekly Contest 72 leetcode 786. K-th Smallest Prime Fraction