数组-删除元素-简单

描述
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。
元素的顺序可以改变,并且对新的数组不会有影响。
您在真实的面试中是否遇到过这个题?  是
样例
给出一个数组 [0,4,4,0,0,2,4,4],和值 4

返回 4 并且4个元素的新数组为[0,0,0,2]

题目链接

分析

这里除了返回数组的长度,还需要返回操作之和的数组。在该系统中,返回的数组与原始顺序是一致的。所以方法一不太好使。我们使用方法二,将不等于elem的元素保存到另外一个数组中,然后再把覆盖赋值。

程序

class Solution {
public:
    /*
     * @param A: A list of integers
     * @param elem: An integer
     * @return: The new length after remove
     */
    //要求在原数组上操作,空间复杂度为O(1)
    //方法一: 使用STL操作
    /*
    int removeElement(vector<int> &A, int elem) {
        // write your code here
        if(A.empty())
            return 0;
        sort(A.begin(), A.end());
        A.erase(find(A.begin(), A.end(), elem), A.end());

        //for(int i = 0; i < A.size(); i++)
        //    cout << A[i] << " ";
        //cout << endl;
        return A.size();
    }
    */
    //题库中的删除后的数组没有排序
    int removeElement(vector<int> &A, int elem) {
        vector<int> B;
        if(A.empty())
            return 0;

        for(int i = 0; i < A.size(); i++){
            if(A[i] != elem)
                B.push_back(A[i]);
        }
        A.clear();
        A.assign(B.begin(), B.end());
        return A.size();
    }
        
};


猜你喜欢

转载自blog.csdn.net/qq_18124075/article/details/80631109
今日推荐