问题描述:
给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。
不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。给出数组 A =[1,1,2],你的函数应该返回长度 2,此时 A=[1,2]
- 利用集合内元素的唯一性
|
|
- 利用字典键值特性
|
|
使用快慢两个指针,替换重复值
初始时,快指针比慢指针快一步,比较两指针指向的数字是否相等,相等时快指针加1,不等时,慢指针加1,同时将快指针指向的数字赋值给慢指针,此时完成重复值的替换。最终数组的长度为慢指针指向的位置,因此需要删除多余的元素。
代码如下:
12345678910111213141516171819class Solution:"""@param: nums: An ineger array@return: An integer"""def removeDuplicates(self, nums):# write your code hereif len(nums) ==0:return 0slow = 0fast = 1for i in range(fast,len(nums)):#发现不同值,替换重复值if nums[i] != nums[slow]:slow+=1nums[slow] = nums[i]del nums[slow+1:len(nums)]#删除多余元素return len(nums)源代码地址:https://github.com/ianxin/Algorithm/tree/master/src