天天看點

LeetCode·26.删除有序數組中的重複項·雙指針題目示例思路代碼

連結:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/solution/by-xun-ge-v-pz0q/

來源:力扣(LeetCode)

著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處 

題目
LeetCode·26.删除有序數組中的重複項·雙指針題目示例思路代碼

示例
LeetCode·26.删除有序數組中的重複項·雙指針題目示例思路代碼

思路

解題思路

雙指針

删除數組中存在的相同元素,題目給定數組為指針,說明nums指向原始數組的位址,我們修改nums相當于修改了nums指向的位址,是以傳回修改之後nums長度即可

對于本題我們定義兩個指針,一個指向數組,周遊數組所有元素,當數組元素相同時,另外一個指針将目前位置之後的所有元素都向前移位,相當于删除操作

雙指針優化

在上述解法中,我們需要周遊還需要搬運元素,時間複雜度為O(n^2),我們可以将周遊和搬運簡化到一個循環中,定義雙指針,當數組元素相同時,慢指針留着目前位置,快指針進行前進,直到不相等時,将快指針指向位置搬運到目前慢指針位置

代碼

int removeDuplicates(int* nums, int numsSize){
    int i, j;//定義快慢指針
    for(i = 1, j = 0; i < numsSize; i++)//周遊整個數組
    {
        if(nums[i] == nums[j])//快指針進行走
        {
            continue;
        }
        nums[++j] = nums[i];//慢指針搬元素
    }
    return ++j;
}

作者:xun-ge-v
連結:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/solution/by-xun-ge-v-pz0q/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。