Advertisement
Alexxik

Untitled

Mar 17th, 2024 (edited)
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.08 KB | None | 0 0
  1. // Количество пар с разницей, больше или равной K
  2.  
  3. // можно решать бинарным поиском. будет идти по каждому элементу и складывать его с K. Дальше через бинарник будем пытаться найти таковой в списке. Если не находим то идем дальше. Если находим, то от этого индекса и до конца все элементы нам подходят - O(nlogn)
  4.  
  5. // вариант быстрее - https://algocode.ru/page/c-16-mergesort/
  6.  
  7. func pairsDifferenceGreaterOrEqualK(_ s: String, _ k: Int) -> Int {
  8.     let s = Array(s).map{String($0)}.map{Int($0)!}
  9.  
  10.     // отсортируем
  11.     var r = 0
  12.     var ans = 0
  13.     for l in 0..<s.count {
  14.         while r < s.count && s[r] - s[l] < k {
  15.             r += 1
  16.         }
  17.         // теперь r под пятеркой, поэтому 6-4 = 2 - верно
  18.         ans += s.count - r
  19.     }
  20.     return ans
  21. }
  22. pairsDifferenceGreaterOrEqualK("123456", 4)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement