美文网首页
删除元素

删除元素

作者: fffzhou | 来源:发表于2018-06-10 23:05 被阅读0次

    题目

    给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。
    元素的顺序可以改变,并且对新的数组不会有影响。
    样例:
    给出一个数组 [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;
        }
    

    相关文章

      网友评论

          本文标题:删除元素

          本文链接:https://www.haomeiwen.com/subject/rfxqeftx.html