C語(yǔ)言基礎(chǔ)雙指針移除元素解法
本題方法:雙指針。知識(shí)比較基礎(chǔ),思路簡(jiǎn)單
題目:
我的題解:
int removeElement(int* nums, int numsSize, int val) { int i=0,j=0; int cnt=0; //計(jì)數(shù)器,用來(lái)統(tǒng)計(jì)val的個(gè)數(shù) while(j<numsSize) { if(nums[j]!=val) //1 { nums[i]=nums[j]; i++; j++; } else //2 { j++; cnt++; } } return numsSize-cnt; //3 }
關(guān)于我的解法思路:
我們先舉個(gè)例子,比如{2,5,7,9,9,1,0}
,val=9
剛開(kāi)始我們讓指針都指向0位置,也就是nums[0],j為快指針,i為慢指針
如果j指向的地方不是val(也就是9),那我們就直接讓nums[j]覆蓋nums[i],并且i++,j++,讓兩個(gè)指針都指向下一個(gè)位置,如下圖:
如此重復(fù),指向7也是同理
指向7這個(gè)元素后,i++,j++,這時(shí)候,兩個(gè)指針都到了val(也就是9)這個(gè)地方
j指針 指向的就是我們要去掉的值val(9),也就是代碼中的 2步驟,這時(shí)候我們 i指針不動(dòng),j指針繼續(xù)往前走
,cnt變量記錄val出現(xiàn)的次數(shù),cnt++。
j到了第二個(gè)9的時(shí)候 ,j指針
還是繼續(xù)往前走
,i指針
還是不變
,cnt依舊++,如下圖
這時(shí)候,j指針指向的是1,就不是val的值了,我們就直接把nums[j]覆蓋nums[i],也就是把1覆蓋9了,那就兩個(gè)指針都往前走,同理j指向0,不是val,那就繼續(xù)覆蓋。
返回值:就是數(shù)組總個(gè)數(shù)numsSize減去val出現(xiàn)的次數(shù)cnt。
雙指針大致思路如上,有意見(jiàn)歡迎指出~
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲
這篇文章主要為大家詳細(xì)介紹了c語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01opencv+arduino實(shí)現(xiàn)物體點(diǎn)追蹤效果
這篇文章主要為大家詳細(xì)介紹了opencv+arduino實(shí)現(xiàn)物體點(diǎn)追蹤效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01Qt出現(xiàn)假死凍結(jié)現(xiàn)象的原因及解決方法
應(yīng)用程序出現(xiàn)假死或凍結(jié)現(xiàn)象通常是由于一些常見(jiàn)問(wèn)題所導(dǎo)致的,本文主要介紹了Qt出現(xiàn)假死凍結(jié)現(xiàn)象的原因及解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的飛機(jī)大戰(zhàn)游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05