刪除元素

題目

給定一個(gè)數(shù)組和一個(gè)值,在原地刪除與值相同的數(shù)字,返回新數(shù)組的長度。
元素的順序可以改變,并且對(duì)新的數(shù)組不會(huì)有影響。
樣例:
給出一個(gè)數(shù)組 [0,4,4,0,0,2,4,4],和值 4
返回 4 并且4個(gè)元素的新數(shù)組為[0,0,0,2]

分析

題目要求就是要?jiǎng)h除數(shù)組中的指定數(shù)字并且返回?cái)?shù)組長度。
剛開始想偷懶遇到指定數(shù)字就k++,直接返回(數(shù)組長度-k),結(jié)果發(fā)現(xiàn)系統(tǒng)會(huì)測(cè)試運(yùn)行完算法后數(shù)組里的元素??。
沒辦法只能按要求來了。
我后來的想法是新建一個(gè)數(shù)組B,儲(chǔ)存值!=4的元素。但發(fā)現(xiàn)好像要實(shí)現(xiàn)將數(shù)組和B替換有點(diǎn)麻煩。
↓↓↓錯(cuò)誤代碼↓↓↓

    //錯(cuò)誤代碼

    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);//這個(gè)用法還是錯(cuò)的/_\
        return elem-k; 
    }

之后就想借鑒一下別人的想法,看看有沒有更簡(jiǎn)便的實(shí)現(xiàn)。
在一篇算法博客上有個(gè)用兩個(gè)指針p和q,一個(gè)指針遍歷,另一個(gè)指向指定元素,再替換元素的值。(好像沒解釋清楚,看代碼吧。。)

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的數(shù)放到前面
                q++;
            }
            p++;
        }
        return q;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容