leetcode914. 卡牌分组
給定一副牌,每張牌上都寫著一個(gè)整數(shù)。
此時(shí),你需要選定一個(gè)數(shù)字 X,使我們可以將整副牌按下述規(guī)則分成 1 組或更多組:
每組都有?X?張牌。
組內(nèi)所有的牌上都寫著相同的整數(shù)。
僅當(dāng)你可選的 X >= 2 時(shí)返回?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
思路:思考后得出結(jié)論,每個(gè)數(shù)字出現(xiàn)的次數(shù),如果有一個(gè)總的最大公約數(shù),就可行。
比如1出現(xiàn)了2次,2出現(xiàn)了4次,3出現(xiàn)了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);} }?
總結(jié)
以上是生活随笔為你收集整理的leetcode914. 卡牌分组的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 买安置房能不能办贷款?
- 下一篇: [C#]Http请求报头设置