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