- Notifications
You must be signed in to change notification settings - Fork24
Open
Labels
Description
双指针
题目要求原地删除重复出现的元素,不要使用额外的数组空间,返回移除后数组的新长度。
先明确,这道题给我们提供的是排好序的数组,所以重复的元素必然相邻。
所以实际上我们只需要将不重复的元素移到数组的左侧,并返回其对应的长度即可。
1.借助双指针,i 从索引 0 开始,j 从索引 1 开始。
2.当前项 nums[j] 与前一位置 nums[j - 1] 相等时,j++ 跳过重复项。
3.当二者不相等时,意味着不是重复项,此时需要将 i 指针右移, 并将 nums[j] 复制到此时的 nums[i] 位置上,然后将指针 j 右移。
4.重复上述过程,直到循环完成,最终返回 i + 1,因为题目要求返回长度,i 是索引位置,加 1 即所求。
constremoveDuplicates=function(nums){constn=nums.lengthleti=0if(n===0)return0for(letj=1;j<n;j++){if(nums[j]!==nums[j-1]){i++nums[i]=nums[j]}}returni+1}
- 时间复杂度:O(n)
- 空间复杂度:O(1)