26. Remove Duplicates from Sorted Array

时间:2022-09-26 09:54:41

https://leetcode.com/problems/remove-duplicates-from-sorted-array/description/
题意:给一个有序数组,要求删除所有重复数,并返回处理后的长度。要求原地算法,直接在给的数组上操作,不能使用额外空间。
思路:提示很明显了,答案只检测前k(去重后的元素个数)个位置,因此可以设两个指针i,j。i表示nums[0:i]是无重复部分,初始为0,因为单个元素必然无重复。工作指针j初始为1,每次往前走一步,比较i和j位置的元素值,若不相等,说明找到新的非重复元素,无重复部分扩张一位(即i增加1),将该元素写入。直到j走到尽头(不用管i,因为j肯定在i前面)。此时nums[0:i]是所有非重复元素,后面的不用管,非重复元素个数为i+1。

class Solution:
    def removeDuplicates(self, nums):
        """ :type nums: List[int] :rtype: int """
        n = len(nums)
        if n == 0:  #边界条件
            return 0
        i = 0
        j = 1
        while j < n:
            if nums[j] != nums[i]:
                nums[i+1] = nums[j]
                i += 1
            j += 1
        return i+1  #返回非重复元素个数