"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Elemento de eliminación del día de Leetcode explicado

Elemento de eliminación del día de Leetcode explicado

Publicado el 2024-07-30
Navegar:630

Leetcode Day Remove Element Explained

El problema es el siguiente:

Dada una matriz de números enteros y un valor de número entero, elimine todas las apariciones de val en números in situ. El orden de los elementos puede cambiarse. Luego devuelve el número de elementos en nums que no son iguales a val.

Considere la cantidad de elementos en nums que no son iguales a val be k. Para ser aceptado, debe hacer lo siguiente:

  • Cambie los números de la matriz de modo que los primeros k elementos de nums contengan los elementos que no sean iguales a val. Los elementos restantes de nums no son importantes, al igual que el tamaño de nums.
  • Devolver k.

Juez personalizado:

El juez probará tu solución con el siguiente código:

int[] nums = [...]; // Input array
int val = ...; // Value to remove
int[] expectedNums = [...]; // The expected answer with correct length.
                            // It is sorted with no values equaling val.

int k = removeElement(nums, val); // Calls your implementation

assert k == expectedNums.length;
sort(nums, 0, k); // Sort the first k elements of nums
for (int i = 0; i 



Si se aprueban todas las afirmaciones, se aceptará su solución.

Ejemplo 1:

Input: nums = [3,2,2,3], val = 3
Output: 2, nums = [2,2,_,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 2.
It does not matter what you leave beyond the returned k (hence they are underscores).

Ejemplo 2:

Input: nums = [0,1,2,2,3,0,4,2], val = 2
Output: 5, nums = [0,1,4,0,3,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums containing 0, 0, 1, 3, and 4.
Note that the five elements can be returned in any order.
It does not matter what you leave beyond the returned k (hence they are underscores).

Así es como lo resolví:

Para resolver este problema, utilicé dos estrategias principales:

  1. Reemplazo in situ: en lugar de crear una nueva matriz para almacenar los elementos que no son iguales a val, use los mismos números de matriz para sobrescribir los elementos que deben eliminarse.
  2. Técnica de dos punteros: un puntero (i) recorre en iteración cada elemento de la matriz y otro puntero (k) realiza un seguimiento de la posición donde se debe colocar el siguiente elemento no val.
  • Primero, inicialice un puntero k y configúrelo en 0. Esto realizará un seguimiento de la posición donde se debe colocar el siguiente elemento no val.
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:       
    k = 0
  • Iterar a través de la matriz de números.
  • Compruebe si los números del elemento actual [i] son ​​diferentes de val para realizar un seguimiento de k.
  • Si es así, mueva los números de elemento [i] a la k-ésima posición e incremente k en 1 para actualizar la posición del siguiente elemento no val.
for i in range(len(nums)):
    if nums[i] != val:
        nums[k] = nums[i]
        k  = 1
  • Devuelve k, que es el número de elementos no iguales a val.
return k

Aquí está la solución completa:

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        k = 0
        for i in range(len(nums)):
            if nums[i] != val:
                nums[k] = nums[i]
                k  = 1
        return k
Declaración de liberación Este artículo se reproduce en: https://dev.to/simona-cancian/leetcode-day-8-remove-element-explained-212a?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3