English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Eliminación de elementos repetidos de un array ordenado en Java

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.

Te gustará