Advertisement
Alexxik

Untitled

Sep 18th, 2023
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.10 KB | None | 0 0
  1. // MARK: - Оставить N повторений каждого числа, сохранив порядок
  2. // Для указанного массива оставить только N повторений (включая первое) каждого числа, сохранив порядок.
  3. // {20, 37, 20, 21}, 1 -> {20, 37, 21}
  4. // {1,2,3,1,2,1,2,3}, 2 -> {1,2,3,1,2,3}
  5.  
  6. func onlyNRepeats(_ nums: [Int], _ k: Int) -> [Int] {
  7.     var nums = nums
  8.     var dict = [Int:Int]()
  9.     var i = 0
  10.    
  11.     while i < nums.count {
  12.         dict[nums[i], default: 0] += 1
  13.        
  14.         // Пока есть повторяющиеся - удаляем
  15.         while dict[nums[i]]! > k {
  16.             dict[nums[i]]! -= 1
  17.             nums.remove(at: i)
  18.             // так как кол-во элементов уменьшается (они сдвигаются назад), а индекс остается тем же то нужно сдвигать индекс на -1
  19.             i -= 1
  20.         }
  21.         i += 1
  22.     }
  23.     return nums
  24. }
  25. onlyNRepeats([20, 37, 20, 21, 21, 21, 20, 20, 20, 20, 21], 3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement