https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/
Dada una matriz ordenada, debe eliminar los elementos repetidos en su lugar, de modo que cada elemento aparezca solo una vez y devolver la nueva longitud de la matriz después de la eliminación.
No use espacio de matriz adicional, debe modificar la matriz de entrada en su lugar y hacerlo con O (1) espacio adicional.
Ejemplo 1:
Números de matriz dados = [1,1,2],
La función debería devolver una nueva longitud de 2, y los dos primeros elementos de los números de matriz originales se modifican a 1, 2.
No necesita considerar los elementos en la matriz más allá de la nueva longitud.
Ejemplo 2
Números dados = [0,0,1,1,1,2,2,3,3,4],
La función debe devolver una nueva longitud de 5, y los primeros cinco elementos de los números de matriz originales se modifican a 0, 1, 2, 3, 4.
No necesita considerar los elementos en la matriz más allá de la nueva longitud.
Solución 1
Ley de violencia, la complejidad del tiempo es mayor!
Solución 2
Método transversal de doble puntero 16ms, 7.5mb
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
if (nums.size() < 2) {
return nums.size();
}
size_t slow = 0, fast = 1;
while (fast < nums.size()) {
if (nums[fast] != nums[slow]) {
nums[++slow] = nums[fast];
}
fast++;
}
return ++slow;
}
};
EOF