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 #返回非重复元素个数