8

删除有序数组中的重复项

·2 分钟

🟢 Easy · 🏷️ 数组、双指针 · LeetCode#26

📖 题目

原地删除升序数组里的重复元素,让每个元素只出现一次,返回新长度。

输入输出
nums=[0,0,1,1,1,2,2,3,3,4]5nums=[0,1,2,3,4,...]

💡 思路

还是移动零那套快慢双指针,保留条件从"不等于某个值"换成了"不等于前一个元素"——数组有序,重复元素一定相邻,只要跟前一个比就够了。

跟前面两题还有个区别:slow 从 1 开始,不是 0。第一个元素不可能重复,肯定保留,slow=1 表示"下一个不重复元素该放的位置从索引 1 开始"。

💻 代码

class Solution:
    def removeDuplicates(self, nums: List[int]) -> int:
        if not nums:
            return 0
        slow = 1
        for fast in range(1, len(nums)):
            if nums[fast] != nums[fast - 1]:
                nums[slow] = nums[fast]
                slow += 1
        return slow

时间复杂度 O(n),空间复杂度 O(1)。

🔀 跟移动零、移除元素对比

移动零移除元素这题
保留条件!= 0!= val!= nums[fast-1]
slow 起点001
比较对象固定值固定值前一个元素