連結:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/solution/by-xun-ge-v-pz0q/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處
題目
示例
思路
解題思路
雙指針
删除數組中存在的相同元素,題目給定數組為指針,說明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)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。