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:
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; iSi 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:
- 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.
- 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.
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
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
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