LeetCode刷題: 【914】卡牌分組(求N個數的最大公因數)

1. 題目

在這裏插入圖片描述

2. 思路

如何求N個數的最大公因數呢?(N > 1)
在初等數學裏,有這麼幾個定理
1、任何一個整數,都可以分解爲素數因子的乘積
比如
24 = 2* 2* 2 * 3;
26 = 2 * 13;
分解時應該從2開始分解起
2、若干個數的最大公因數是共同素數因子的乘積
比如 求 48 60 72 的最大公因數
48 = 2*2*2*2*3
60 = 2*2*3*5
72 = 2*2*2*3*3
共同的素數因子爲 2 * 2 * 3 = 12 所以他們的最大公因數就是12

3. 代碼

class Solution {
public:
    bool hasGroupsSizeX(vector<int>& deck) {
        unordered_map<int, int> temp;
        // 計數
        for(int it : deck){
            temp[it]++ ;
        }
        // 計算最大公因數
        int gc = temp[deck[0]];
        for(auto it : temp){
            gc = gcd(gc, it.second);   
        }
		// 題目要求
        return gc >= 2;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章