[Práctica de preguntas de algoritmo preferida] día 1


Doble puntero:

1. 283. Moviendo el cero

1. Introducción al tema

283. Mover ceros
Dada una matriz de números, escriba una función que mueva todos los ceros al final de la matriz mientras mantiene el orden relativo de los elementos distintos de cero.
Tenga en cuenta que las matrices deben operarse en el lugar sin copiarlas.
Insertar descripción de la imagen aquí

2. Ideas para resolver problemas

3.Código

class Solution {
    
    
public:
    void moveZeroes(vector<int>& nums) {
    
    
        int cur = 0, prev = -1;//cur是0区间后的第一个非0,prev是0区间前的最后一个非0
        while(cur < nums.size())
        {
    
    
            if(nums[cur])
            {
    
    
                swap(nums[++prev], nums[cur]);
            }
            cur++;
        }
    }
};

4. Resultados de ejecución

Insertar descripción de la imagen aquí

2. 1089. Copia cero

1. Introducción al tema

1089. Copia ceros.
Se te proporciona un arreglo de matriz de enteros de longitud fija. Copia cada cero que aparece en la matriz y desplaza los elementos restantes hacia la derecha.
Nota: No escriba elementos más allá de la longitud de la matriz. Realice las modificaciones anteriores in situ en la matriz de entrada y no devuelva nada de la función.
Insertar descripción de la imagen aquí

2. Ideas para resolver problemas

3.Código

class Solution {
    
    
public:
    void duplicateZeros(vector<int>& arr) {
    
    
        int prev = -1, cur = 0, n = arr.size();//双指针,找到修改后数组的最后一个元素
        while(cur < n)
        {
    
    
            if(arr[cur] != 0)
            {
    
    
                prev++;
            }
            else
            {
    
    
                prev += 2;
            }
            if(prev >= n - 1) break;//prev已经到终止位置
            cur++;
        }
        //处理边界(如果prev超出数组边界2个位置,说明cur判断的最后一个元素是0,因为数组的空间有限,cur最后遍历到的0无法进行复制,因此我们要对这种情况进行修复,即将数组最后一个元素修改为0(直接后移不进行复制)。然后让cur退一步,prev退两步,再进行向后移动元素的操作即可)
        if(prev == n)
        {
    
    
            arr[n - 1] = 0;
            cur--;
            prev -= 2;
        }
        //从最后一个元素开始从后往前移动,遇到0就往后填充两个0.
        while(cur >= 0)
        {
    
    
            if(arr[cur] == 0)
            {
    
    
                arr[prev--] = 0;
                arr[prev--] = 0;
                cur--;
            }
            else
            {
    
    
                arr[prev--] = arr[cur--];
            }
        }
    }
};

4. Resultados de ejecución

Insertar descripción de la imagen aquí

3. 202. Número feliz

1. Introducción al tema

202. Números felices
Escribe un algoritmo para determinar si un número n es un número feliz.
"Número feliz" se define como:
para un número entero positivo, cada vez que el número se reemplaza por la suma de los cuadrados de los números en cada posición.
Luego repita este proceso hasta que el número llegue a 1, o puede repetirse infinitamente pero nunca llegar a 1.
Si el resultado de este proceso es 1, entonces este número es el número feliz.
Devuelve verdadero si n es un número feliz; en caso contrario, devuelve falso.
Insertar descripción de la imagen aquí

2. Ideas para resolver problemas

3.Código

class Solution {
    
    
public:
    int bitsum(int n)
    {
    
    
        int ret = 0;
        while(n)
        {
    
    
            int t = n%10;
            ret += t * t;
            n /= 10;
        }
        return ret;
    }
    bool isHappy(int n) {
    
    
        int slow = n, fast = bitsum(n);
        while(slow != fast)
        {
    
    
            slow = bitsum(slow);
            fast = bitsum(bitsum(fast));
        }
        return slow == 1;
    }
};

4. Resultados de ejecución

Insertar descripción de la imagen aquí


Resumir

Hoy es el primer día de práctica de algoritmos.
La cuerda corta la madera, las gotas de agua penetran la piedra , sigue trabajando duro.
Fuente: LeetCode, los derechos de autor pertenecen a LeetCode.
Si este artículo os ha inspirado, espero que podáis apoyar más al autor, ¡gracias a todos!

Supongo que te gusta

Origin blog.csdn.net/xjjxjy_2021/article/details/131503866
Recomendado
Clasificación