Python|“雙指針法”解刪除數(shù)組重復(fù)項問題
Python算法題目中,掌握一定的方法和技巧或者說是了解基礎(chǔ)解題規(guī)律,能夠在解決更多復(fù)雜問題的過程中思路更清晰,算法更簡單易懂。接下來用一個leetcode題目“原地刪除排序數(shù)組重復(fù)項”的案例來介紹一下“雙指針法”的具體應(yīng)用。
題目描述:
給定一個排序數(shù)組,需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個元素只出現(xiàn)一次,返回移除后新的數(shù)組。
輸入:[1,1,2]
輸出:[1,2]
解決方案:
1.首先需要引入兩個指針i,k;
2.指針i先用于遍歷數(shù)組,由于要刪除相同數(shù)字,需要判斷是否與上一個數(shù)字相同,當(dāng)遇到nums[i] != ums[i-1]時,說明已遇到新的不同數(shù)字,此時,將該數(shù)字記錄;
3.指針k有兩個不同的作用。
一是用來統(tǒng)計這個數(shù)組中不同數(shù)字的數(shù)量,即每當(dāng)遇到新的數(shù)字時,就執(zhí)行k +=1 ;
二是為了記錄這個新的數(shù)字,將指針i遍歷而遇到的新的數(shù)字的索引賦值給k,即nums[k] = nums[i]。
4.最終得到的k就是返回值。
代碼示例:
class Solution:
def removeDuplicates(self, nums: [int]) -> int:
if len(nums) == 0: return 0
k = 1
for i in range(1, len(nums)):
if nums[i] != nums[i - 1]:
nums[k] = nums[i]
k += 1
return k
結(jié)語
通過這道題目,可以了解到在解決原地刪除問題時,遇到這種有序依次排列的數(shù)組,用遍歷來做十分方便,而遍歷數(shù)組,就聯(lián)想到可以用雙指針法來解決。兩個指針,一個用來遍歷判斷,一個用來記錄數(shù)據(jù),十分容易就能得到結(jié)果。
版權(quán)聲明:轉(zhuǎn)載文章來自公開網(wǎng)絡(luò),版權(quán)歸作者本人所有,推送文章除非無法確認(rèn),我們都會注明作者和來源。如果出處有誤或侵犯到原作者權(quán)益,請與我們聯(lián)系刪除或授權(quán)事宜。