去除排序数组重复元素

问题描述:

给定一个排序数组,在原数组中删除重复出现的数字,使得每个元素只出现一次,并且返回新的数组的长度。

不要使用额外的数组空间,必须在原地没有额外空间的条件下完成。给出数组 A =[1,1,2],你的函数应该返回长度 2,此时 A=[1,2]

  1. 利用集合内元素的唯一性
1
2
3
4
5
6
7
"""
@param: nums: An ineger array
@return: An integer
"""
def removeDuplicaties(nums):
nums = list(set(nums))
return len(nums)
  1. 利用字典键值特性
1
2
3
4
5
6
7
"""
@param: nums: An ineger array
@return: An integer
"""
def removeDuplicaties(nums):
nums = list({}.fromkeys(nums).keys())
return len(nums)
  1. 使用快慢两个指针,替换重复值

    初始时,快指针比慢指针快一步,比较两指针指向的数字是否相等,相等时快指针加1,不等时,慢指针加1,同时将快指针指向的数字赋值给慢指针,此时完成重复值的替换。最终数组的长度为慢指针指向的位置,因此需要删除多余的元素。

    代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class Solution:
    """
    @param: nums: An ineger array
    @return: An integer
    """
    def removeDuplicates(self, nums):
    # write your code here
    if len(nums) ==0:
    return 0
    slow = 0
    fast = 1
    for i in range(fast,len(nums)):
    #发现不同值,替换重复值
    if nums[i] != nums[slow]:
    slow+=1
    nums[slow] = nums[i]
    del nums[slow+1:len(nums)]#删除多余元素
    return len(nums)

    源代码地址:https://github.com/ianxin/Algorithm/tree/master/src

赞赏是对作者最大的支持!
0%