删除元素

题目

给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。
元素的顺序可以改变,并且对新的数组不会有影响。
样例:
给出一个数组 [0,4,4,0,0,2,4,4],和值 4
返回 4 并且4个元素的新数组为[0,0,0,2]

分析

题目要求就是要删除数组中的指定数字并且返回数组长度。
刚开始想偷懒遇到指定数字就k++,直接返回(数组长度-k),结果发现系统会测试运行完算法后数组里的元素🙃。
没办法只能按要求来了。
我后来的想法是新建一个数组B,储存值!=4的元素。但发现好像要实现将数组和B替换有点麻烦。
↓↓↓错误代码↓↓↓

    //错误代码

    int removeElement(vector<int> &A, int elem) {
        int num=A.size();int k=0;int n=0;
        vector<int> B;
        for(int i=0;i<num;i++){
            if(A[i]==elem)
    {
                k++;
            }
            else
            {
                B[n]=A[i];
                n++;
            }
        }
        A.clear();
        A.swap(B);//这个用法还是错的/_\
        return elem-k; 
    }

之后就想借鉴一下别人的想法,看看有没有更简便的实现。
在一篇算法博客上有个用两个指针p和q,一个指针遍历,另一个指向指定元素,再替换元素的值。(好像没解释清楚,看代码吧。。)

CODE

int removeElement(vector<int> &A, int elem) {
        int num=A.size();
        int p,q;
        p=q=0;//p用以遍历,q用来存!=elem的元素
        while(p<num){
            if(A[p]!=elem){
                A[q]=A[p];  //将!=elem的数放到前面
                q++;
            }
            p++;
        }
        return q;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。