給定一副牌,每張牌上都寫著一個整數。
此時,你需要選定一個數字 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]
提示:
1 <= deck.length <= 10000
0 <= deck[i] <?10000
思路:思考后得出結論,每個數字出現的次數,如果有一個總的最大公約數,就可行。
比如1出現了2次,2出現了4次,3出現了8次,此用例就是true。
另外注意到deck[i]的范圍,明顯用桶記錄更好。
class Solution {public boolean hasGroupsSizeX(int[] deck) {int[] count = new int[10000];for (int c: deck) count[c]++;int g = -1;for (int i = 0; i < 10000; ++i)if (count[i] > 0) {if (g == -1) g = count[i];else g = gcd(g, count[i]);}return g >= 2;}public int gcd(int x, int y) {return x == 0 ? y : gcd(y%x, x);}
}
?