1. 程式人生 > >[leetcode]卡牌分組

[leetcode]卡牌分組

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]

提示:

  1. 1 <= deck.length <= 10000
  2. 0 <= deck[i] < 10000

C++解法:

class Solution {
public:
    bool hasGroupsSizeX(vector<int>& deck) {
        map<int, int> deckMap;
vector<int> v; //臨時vector容器 for (int i = 0, length = deck.size(); i < length; ++i) { deckMap[deck[i]]++; } for (auto &card : deckMap) { v.push_back(card.second); if (card.second == 1) { return
false; } } sort(v.begin(), v.end()); if (v.size() == 1) { return true; } for (int X = 2; X <= 5000; ++X) { int count = 0; for (int j = 0, vlength = v.size(); j < vlength; ++j) { if ((v[j] % X) == 0) { ++count; if (count == vlength) { return true; } } } } return false; } };