Advertisement
Guest User

Grokking #209

a guest
Feb 23rd, 2022
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.84 KB | None | 0 0
  1. // Scala code
  2. object Solution {
  3.   import scala.collection.mutable._
  4.   import scala.util.Sorting._
  5.  
  6.   def smallestDistancePair(nums: Array[Int], k: Int): Int = {
  7.     var n = nums.length
  8.     quickSort(nums)
  9.  
  10.     var lo = 0
  11.     var hi = nums(n - 1) - nums(0)
  12.  
  13.     while (lo < hi) {
  14.       var mid = lo + (hi - lo) / 2
  15.  
  16.       // count number of pairs which distance <= mid
  17.       var count = 0
  18.       var j = 0
  19.       for (i <- 0 until n) {
  20.         j = math.max(i + 1, j)
  21.         while (j < n && nums(i) + mid >= nums(j)) {
  22.           j += 1
  23.         }
  24.         count += j - i - 1
  25.       }
  26.  
  27.       // if number of pairs with distance up to mid >= k,
  28.       // continue searching until found minimum "mid" value (minimum distance)
  29.       if (count >= k) {
  30.         hi = mid
  31.       } else {
  32.         lo = mid + 1
  33.       }
  34.     }
  35.  
  36.     return lo
  37.   }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement