English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Descripción del problema
Dado un array ya ordenado, eliminar los elementos repetidos del array, mantener solo un elemento repetido y devolver la nueva longitud del array.
Requisitos:
No debes asignar espacio adicional al array, debes usar el tamaño de memoria constante para la operación en el lugar.
Por ejemplo:
Dado el array A=[1,1,2],después de que tu función sea llamada, debes devolver la longitud length=2,y ahora A se convierte en [1,2]。
Entrada
Un array ya ordenado, por ejemplo, [1,1,2]。
Salida
Devolver la nueva longitud del array, por ejemplo, length=2.
Método de punteros rápido y lento
Establecer el puntero rápido para recorrer el array y el puntero lento para apuntar al siguiente elemento sin repetir.
public static int removeDuplicates(int[] nums) { if (nums.length < 1); devolver nums.length; int slow = 1; for (int fast = 1; fast < nums.length; fast++) { if (nums[fast] != nums[slow - 1]) { nums[slow++]= nums[fast]; } } devolver slow; }
Demostración en animación:
Extensión
Elimina elementos duplicados de un array ya ordenado, manteniendo la cantidad de dígitos especificada.
public static int removeDuplicatesN(int[] nums, int repeatN) { if (nums.length <= repeatN) devolver nums.length; int index = repeatN; for (int i = repeatN; i < nums.length; i++) { if (nums[i] != nums[index - repeatN]) { nums[index++]= nums[i]; } } devolver index; }
Esto es todo el contenido del artículo, espero que sea útil para su aprendizaje y que todos los amigos apoyen el tutorial de gritos.
Declaración: El contenido de este artículo se ha obtenido de Internet, pertenece a los propietarios originales, el contenido ha sido contribuido y subido por usuarios de Internet de manera autónoma. Este sitio no posee los derechos de propiedad, no ha sido editado por humanos y no asume responsabilidad alguna por las leyes de derechos de autor. Si encuentra contenido sospechoso de infracción de derechos de autor, por favor envíe un correo electrónico a notice#w.3Aviso: Si encuentra contenido sospechoso de infracción de derechos de autor en este sitio, envíe un correo electrónico a notice#w para denunciar y proporcionar evidencia relevante. Una vez confirmada la infracción, este sitio eliminará inmediatamente el contenido sospechoso.