日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言基礎雙指針移除元素解法_C 語言

作者:風能保暖內褲 ? 更新時間: 2022-03-20 編程語言

本題方法:雙指針。知識比較基礎,思路簡單

題目:

我的題解:

int removeElement(int* nums, int numsSize, int val)
{
    int i=0,j=0;
    int cnt=0;                 //計數器,用來統計val的個數
    while(j<numsSize)
    {
        if(nums[j]!=val)       //1
        {
            nums[i]=nums[j];
            i++;
            j++;
        }    
        else                  //2                  
        {
            j++;
            cnt++;
        }
    }
    return numsSize-cnt;      //3
}

關于我的解法思路:

我們先舉個例子,比如{2,5,7,9,9,1,0},val=9

剛開始我們讓指針都指向0位置,也就是nums[0],j為快指針,i為慢指針

如果j指向的地方不是val(也就是9),那我們就直接讓nums[j]覆蓋nums[i],并且i++,j++,讓兩個指針都指向下一個位置,如下圖:

如此重復,指向7也是同理

指向7這個元素后,i++,j++,這時候,兩個指針都到了val(也就是9)這個地方

j指針 指向的就是我們要去掉的值val(9),也就是代碼中的 2步驟,這時候我們 i指針不動,j指針繼續往前走,cnt變量記錄val出現的次數,cnt++。

j到了第二個9的時候 ,j指針還是繼續往前走,i指針還是不變,cnt依舊++,如下圖

這時候,j指針指向的是1,就不是val的值了,我們就直接把nums[j]覆蓋nums[i],也就是把1覆蓋9了,那就兩個指針都往前走,同理j指向0,不是val,那就繼續覆蓋。

返回值:就是數組總個數numsSize減去val出現的次數cnt。

雙指針大致思路如上,有意見歡迎指出~

原文鏈接:https://blog.csdn.net/weixin_63519461/article/details/122187281

欄目分類
最近更新