Java aplicación LeetCode 338 número de bits

338. recuento de bits

Dado un num número entero no negativo. Para 0 ≤ i ≤ i, cada rango num digital, que calcula el número de dígitos binarios 1 y vuelve como una matriz.

Ejemplo 1:

Entrada: 2
de salida: [0,1,1]
Ejemplo 2:

Entrada: 5
Salida: [0,1,1,2,1,2]
avanzada:

Dada la complejidad de tiempo es O (n * sizeof (entero) ) responde muy fácil. Pero se puede en el tiempo lineal O (n) con un pase hacerlo?
Los requisitos de espacio de la complejidad del algoritmo es O (n).
Puede mejorar aún más la solución que? Solicitud no utiliza ningún tipo (por ejemplo, en __builtin_popcount C ++) en C ++ o cualquier otro lenguaje de funciones integradas para hacer esto.

El PS:
i y (i - 1) puede ser eliminado más a la derecha i a 1 (si los hay), y por lo tanto i y (i - 1) es menor que i, y i y (i - 1) tiene una serie de delante contó, por lo que el número i es uno de i y (i - 1) número 1 más 1

class Solution {
    public int[] countBits(int num) {
        int[] res = new int[num + 1];
        for(int i = 1;i<= num;i++){  //注意要从1开始,0不满足
            res[i] = res[i & (i - 1)] + 1;
        }
        return res;
    }
}
Liberadas 1452 artículos originales · ganado elogios 10000 + · vistas 1,73 millones +

Supongo que te gusta

Origin blog.csdn.net/a1439775520/article/details/104737876
Recomendado
Clasificación