914. El paquete de la tarjeta C ++ 5 líneas para mejorar la solución oficial a un problema de la extrema simplicidad

914. El paquete de tarjeta

Dada una baraja de cartas, cada carta se escriben en un entero.

En este punto, es necesario seleccionar una X digital, por lo que podemos ser barajas completas de acuerdo a las siguientes reglas en uno o más grupos:

Cada grupo tiene X cartas.
Dentro del grupo están escritos el mismo entero en todas las tarjetas.
> = 2 devuelve cierto sólo si X. opcional

Ejemplo 1:

Entrada: [1,2,3,4,4,3,2,1]
de salida: true
interpretación: agrupación es [1,1], [2,2], [3,3], [4,4 posible ]

Ejemplo 2:

Entrada: [1,1,1,2,2,2,3,3]
Salida: falsa
interpretación: el paquete no cumple los requisitos.

Ejemplo 3:

Entrada: [1]
Salida: falsa
interpretación: el paquete no cumple los requisitos.

Ejemplo 4:

Entrada: [1,1]
de salida: true
interpretación: agrupación es posible [1,1]

Ejemplo 5:

Entrada: [1,1,2,2,2,2]
de salida: true
interpretación: agrupación es posible [1,1], [2,2], [2,2]

consejos:

1 <= deck.length <= 10000
0 <= mazo [i] <10 000

pensamiento

0:00 de anoche, también, quiero preguntas a dormir. De acuerdo con cifras comenzó a escribir la mayor parte de la cuenta, el número de todos lo mismo era verdad. Presentar error, consulte [1,1,2,2,2,2] entender, atenta consideración o no. Él pensó por un momento, siempre y cuando la totalidad de la cantidad de tarjetas existen> = número de 2 a la Convención. Después de la presentación de la última vez que la memoria es del 10%, muy embarazoso. Éstos son sólo para el registro, el funcionario recomendó a ver una solución a un problema.
Este artículo fue escrito la mitad del tiempo que probé la autoridad competente, también después del 10%, me retracto de las palabras de arriba, ja, ja, ja.
La solución oficial a un problema es más de lo que limpiar mucho, pero creo que todavía hay margen de mejora en las explicaciones oficiales.
0 a cualquier número GCD es en sí mismo, el uso de esta característica se puede omitir todas las cartas en una cantidad de 0 cnt omitido [i] es determinado no es cero, mientras que si (~ g) también se omite en la circulación, el código método muy simple, muy inteligente.
Cualquier número y gcd el 0 es en sí, estas palabras pueden hacer que se sienta confundido, no se preocupe, aquí para hablar de la necesidad de aplicar el mcd.
No sé C ++ viene con mcd mcd cuando mi propia tanto tiempo, después de leer lo entenderás.

inline int gcd(int a, int b) {
    if (b) while ((a %= b) && (b %= a));
    return a + b;
}

C ++ __gcd incorporado () es la división Nianzhuan fase estimada.
Y esta solución a un problema de comentario oficial por lo que se rió en voz alta.
Aquí Insertar imagen Descripción

La mejora de las explicaciones oficiales

class Solution {
    int cnt[10000];
public:
    bool hasGroupsSizeX(vector<int>& deck) {
        for (auto x: deck) cnt[x]++;
        int g = 0;
        for (int i = 0; i < 10000; ++i)
            g = gcd(g, cnt[i]);
        return g >= 2;
    }
};

Mi ( después del 10% ) respuesta

class Solution {
public:
    bool hasGroupsSizeX(vector<int>& deck) {
        map<int, int> cards;
        for (auto num:deck){
            if (cards.count(num) != 0)
                cards[num]++;
            else
                cards[num] = 1;
        }
        int cnt = cards.begin()->second;
        for (auto card : cards)
            if (card.second != cnt)
                return false;
        return true;
    }
};
Publicado 38 artículos originales · ganado elogios 0 · Vistas 1016

Supongo que te gusta

Origin blog.csdn.net/Cyan1956/article/details/105134780
Recomendado
Clasificación