leet-code 27. Eliminar elementos https://leetcode-cn.com/problems/remove-element/
Solución 1 Violencia
¡La implementación de C ++ debería prestar atención al problema de la falla del iterador!
4 ms 6,3 MB
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
auto it = nums.begin();
while (it != nums.end()) {
if (*it == val) {
it = nums.erase(it);
} else {
++it;
}
}
return nums.size();
}
};
Solución 2 Método de doble puntero
Similar a 26. Eliminar duplicados en la matriz
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
size_t s = 0, f = 0;
while (f < nums.size()) {
if (nums[f] != val) {
nums[s++] = nums[f];
}
f++;
}
return s;
}
};
Solución 3 Optimización de doble puntero
Esta solución se lee en la solución.
Método de doble puntero, cuando hay menos elementos en nums == val. En el método 2, algunos elementos se desplazarán innecesariamente.
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
size_t n = nums.size();
size_t i = 0;
while (i < n) {
if (nums[i] == val) {
nums[i] = nums[n - 1]; // 和最后一个有效值交换
--n; // 有效元素 - 1
} else {
++i;
}
}
return n;
}
};
EOF