[Una pregunta por día] 27. Eliminar elementos

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

Se han publicado 98 artículos originales · 91 alabanzas · Más de 40,000 visitas

Supongo que te gusta

Origin blog.csdn.net/Hanoi_ahoj/article/details/105354674
Recomendado
Clasificación