Algoritmo-eliminar duplicados en una matriz ordenada (método de doble puntero)

Dirección LeetCode

Pregunta:
Dada una matriz ordenada, debe eliminar los elementos repetidos en su lugar, de modo que cada elemento solo aparezca una vez y devolver la nueva longitud de la matriz eliminada.

No use espacio adicional en la matriz, debe modificar la matriz de entrada en su lugar y usar O (1) espacio adicional.

Ejemplo 1:

给定数组 nums = [1,1,2], 

函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 

你不需要考虑数组中超出新长度后面的元素。

Ejemplo 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。

你不需要考虑数组中超出新长度后面的元素。

Idea de realización:
dos personas por defecto, una p, una q, q se paran delante de p,

  • Si la posición py el valor de la posición q no son iguales, ambos avanzarán (pyq no están uno al lado del otro, por lo que debe asignar el valor de la posición q a la posición p + 1, y luego ambos darán un paso hacia adelante; pyq están uno al lado del otro, no es necesario reasignar, solo use ambos para dar un paso adelante)
  • Si es el mismo, entonces p no se mueve yq un paso adelante;
  • Hasta que p llegue a su fin;

lograr:

class Solution {
    
    
	public int removeDuplicates(int[] nums) {
    
    
		int p = 0;
		int q = 1;
		while (q < nums.length) {
    
    
			if (nums[p] != nums[q]) {
    
    
				if ((p + 1) < q) {
    
    
					nums[p + 1] = nums[q];
				}
				p++;
			}
			q++;
		}
		return p + 1;
	}
}

Solo para este registro, si hay un problema con el código o hay una mejor manera de implementarlo, deje un mensaje, gracias

Supongo que te gusta

Origin blog.csdn.net/nongminkouhao/article/details/107957454
Recomendado
Clasificación