Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MARK: - Оставить N повторений каждого числа, сохранив порядок
- // Для указанного массива оставить только N повторений (включая первое) каждого числа, сохранив порядок.
- // {20, 37, 20, 21}, 1 -> {20, 37, 21}
- // {1,2,3,1,2,1,2,3}, 2 -> {1,2,3,1,2,3}
- func onlyNRepeats(_ nums: [Int], _ k: Int) -> [Int] {
- var nums = nums
- var dict = [Int:Int]()
- var i = 0
- while i < nums.count {
- dict[nums[i], default: 0] += 1
- // Пока есть повторяющиеся - удаляем
- while dict[nums[i]]! > k {
- dict[nums[i]]! -= 1
- nums.remove(at: i)
- // так как кол-во элементов уменьшается (они сдвигаются назад), а индекс остается тем же то нужно сдвигать индекс на -1
- i -= 1
- }
- i += 1
- }
- return nums
- }
- onlyNRepeats([20, 37, 20, 21, 21, 21, 20, 20, 20, 20, 21], 3)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement