Leetcode:Remove Element

戳我进传送门

Given an array and a value, remove all instances of that value in place and return the new length.



The order of elements can be changed. It doesn't matter what you leave beyond the new length.

 

这个直接用STL,实在是太简单了

class Solution {

public:

    int removeElement(int A[], int n, int elem) {

        assert(A != NULL && n >= 0);

        return distance(A, remove(A, A+n, elem));

    }

};

 

好吧,你说你不会C++,你不care c++,没关系,用C写也就几行代码的事

class Solution {

public:

    int removeElement(int A[], int n, int elem) {

        assert(A != NULL && n >= 0);

        int index = 0;

        for (int i = 0; i < n; ++i) {

            if (A[i] != elem) {

                A[index] = A[i];

                ++index;

            }

        }

        return index;

    }

};

复杂度都是O(n)  一次线性扫描即可

 

扩展:

如果我想删除所有奇数或者偶数或者质数呢? 或者想删除值位于[a,b]的元素呢?  这个都是类似的

对于C++,写个仿函数,然后传入remove_if的第三个参数回调即可

对于C,写个判断函数,然后使用这个函数作为if语句的测试条件

你可能感兴趣的:(LeetCode)