914. 卡牌分组
给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:
每组都有 X 张牌。
组内所有的牌上都写着相同的整数。
仅当你可选的 X >= 2 时返回 true。
示例 1:
输入:[1,2,3,4,4,3,2,1]
输出:true
解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]示例 2:
输入:[1,1,1,2,2,2,3,3]
输出:false
解释:没有满足要求的分组。示例 3:
输入:[1]
输出:false
解释:没有满足要求的分组。示例 4:
输入:[1,1]
输出:true
解释:可行的分组是 [1,1]示例 5:
输入:[1,1,2,2,2,2]
输出:true
解释:可行的分组是 [1,1],[2,2],[2,2]
题解
/**
* @param {number[]} deck
* @return {boolean}
*/
var hasGroupsSizeX = function(deck) {
let a = []
let arr = []
let c = 0
function getBigFactor(a, b) {
if (b == 0) {
return a;
}
return getBigFactor(b, a % b)
}
deck.sort((a, b) => a - b)
for (let i = 0; i < deck.length - 1; i++) {
if (deck[i] == deck[i + 1]) {
a.push(deck[i])
}
if (deck[i] != deck[i + 1] || i == deck.length - 2) {
if (a.length > 0) {
arr.push(a.length + 1)
}
a = []
}
}
for (let i = 0; i < arr.length; i++) {
c += arr[i]
if (getBigFactor(arr[0], arr[i]) == 1) {
return false
}
}
if (arr.length == 0 || c != deck.length) {
return false
}
return true
};