es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Contando Bits no está dando la salida esperada.

Intentando resolver el “Conteo de Bits utilizando JavaScript”, básicamente “encontrando la cantidad de bits establecidos para todos los números del 0 al N y almacenándolos en un array y devolviéndolos como respuesta”.

Aquí está la explicación:

            Entrada: n = 5
            Salida: [0,1,1,2,1,2]
            Explicación:
            0 -> 0
            1 -> 1
            2 -> 10
            3 -> 11
            4 -> 100
            5 -> 101

Aquí está la solución en JavaScript:

                const countBits = function (nums){

                   let mem = [];
                   mem[0] = 0;


                   for (let i=0;i<=nums;i++)

                     mem[i] = mem[i/2] + i%2;

                     return mem;


                }

Veo la salida como:

            PS C:\VSB-PRO> node Fibo.js
            [ 0, NaN, NaN, NaN, NaN ]

Aquí está el código de referencia que intenta convertir, que fue escrito previamente en Java:

            class Solution {
            public:
                vector<int> countBits(int num) {
                    //mem[i] = No de 1s desde 0 hasta el número i
                    vector<int> mem(num+1);
                    mem[0] = 0;

                    for(int i=1;i<=num;++i)
                        mem[i] = mem[i/2] + i%2;

                    return mem;
                }
            };

Tu ayuda es muy apreciada.

Saludos,

Carolyn

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Explicación de la solución de contar bits en JavaScript

    El problema consiste en encontrar el número de bits establecidos (1’s) para todos los números desde 0 hasta N y colocarlos en un array que será devuelto como respuesta. La solución utiliza un enfoque de programación dinámica.

    La función countBits recibe nums como entrada (el límite superior del rango de números para los cuales se deben contar los bits establecidos) e inicializa un array mem con longitud nums+1.

    mem[0] se establece en 0.

    Se inicia un bucle desde i=0 hasta i<=nums, y en cada iteración se calcula el número de bits establecidos para el número i como el número de bits establecidos para el número i/2 (que se encuentra desplazando cada dígito a la derecha en una posición) sumado al número de bits establecidos para el dígito menos significativo de i (que se encuentra tomando el módulo de i entre 2).

    Cada resultado se almacena en el índice correspondiente del array mem.

    Finalmente, se devuelve el array mem.

    La salida generada por el código proporcionado muestra valores NaN porque los operadores de comparación no están correctamente formateados. En JavaScript, el operador para menor o igual que es <=, no <=, como lo es en HTML. Después de reemplazar todas las instancias de < con <, el código debería ejecutarse sin arrojar errores.

    Después de hacer esta corrección, la función debería ser capaz de proporcionar el array de salida [0,1,1,2,1,2] correcto para la entrada n=5, como se muestra en el ejemplo del enunciado del problema.

Comments are closed.