Сложность: easy
Вам дан целочисленный массив deck, где deck[i] - число, написанное на i-й карте. Разделите карты на одну или несколько групп так, чтобы: в каждой группе было ровно x карт, где x > 1, и на всех картах в одной группе было написано одно и то же целое число. Верните true, если такое разделение возможно, или false в противном случае.
Пример:
Input: deck = [1,2,3,4,4,3,2,1]
Output: true
👨💻 Алгоритм:
1⃣Создать словарь для подсчета частоты каждого числа в массиве deck.
2⃣Найти наибольший общий делитель (НОД) всех частот.
3⃣Проверить, больше ли НОД 1, чтобы определить, можно ли разделить карты на группы.
😎 Решение:
class Solution {
func hasGroupsSizeX(_ deck: [Int]) -> Bool {
let count = deck.reduce(into: [:]) { counts, num in
counts[num, default: 0] += 1
}
let freqValues = Array(count.values)
let g = freqValues.reduce(freqValues[0], gcd)
return g > 1
}
private func gcd(_ a: Int, _ b: Int) -> Int {
var a = a, b = b
while b != 0 {
let temp = a % b
a = b
b = temp
}
return a
}
}Ставь 👍 и забирай 📚 Базу знаний