[Uma pergunta diária] 162. O pacote de cartão (analógico, GCD, solução convencional)

1. Título Fonte

Links: 914. Cartão de agrupamento
Fonte: LeetCode

2. Descrição título

Aqui Insert Picture Descrição
Aqui Insert Picture Descrição

3. Título determinação

MÉTODO A: Método analógico convencional + + gcd

simples título, necessidade abstrato de entender, simplesmente sob a idéia:

  • Você primeiro precisa ser repetido o número de estatísticas, usando mapestruturas de dados pode ser diretamente estatísticas, o mais conveniente e eficaz. Há também uma matriz usando o pode contar. Claro, sortpós-processamento é também possível complexidade, alto tempo. Muitos método de processamento de dados, não-chave.
  • Contar o número de repetições para obter todos os algarismos significativos, então o pacote xé qualquer repetição destes não-convenção um número 1 , devido a esta pré-feito gcdmaior método divisor comum para ser utilizado directamente, e com a eficiência de divisão interna também é removido alta. Pode também procurar para enumerar o número de convenções por meio da violência, a complexidade de tempo é maior.

Veja o código abaixo:

// 执行用时 :44 ms, 在所有 C++ 提交中击败了6.40%的用户
// 内存消耗 :16.9 MB, 在所有 C++ 提交中击败了5.71%的用户

class Solution {
public:
    bool hasGroupsSizeX(vector<int>& deck) {
        map<int, int> m;
        for (int i = 0; i < deck.size(); i++)
            m[deck[i]]++;
        int g = m.begin()->second;
        for (auto  i = m.begin(); i != m.end(); i++) 
            g = gcd(g, i->second);
        return g >= 2;
    }
};

// 简约风
class Solution {
public:
    bool hasGroupsSizeX(vector<int>& deck) {
        map<int, int> m;
        for (auto& e : deck) m[e]++;
        int g = m.begin()->second;
        for (auto& e : m) g = gcd(g, e.second);
        return g >= 2;
    }
};
Publicado 392 artigos originais · ganhou elogios 336 · vê 80000 +

Acho que você gosta

Origin blog.csdn.net/yl_puyu/article/details/105153083
Recomendado
Clasificación