【LeetCode】【Array】删除有序数列中的重复元素

Question:

给定一个已排序的数组nums,就地删除重复项,以使每个元素仅出现一次并返回新的长度。

要求:

不要为另一个数组分配额外的空间,必须通过使用O(1)额外的内存就地修改输入数组来做到这一点。

Answer1:

def removeDuplicates(nums):
    if len(nums) == 0: return 0

    nums.sort()  ##排序,在本题中可以shenglue
    num_pre = nums[0]
    for i in range(1,len(nums)):
        if nums[i]-num_pre == 0:
            nums[i] = None
        else:
            num_pre = nums[i]
    while None in nums:
        nums.remove(None)
    return len(nums)

将数组排序后,两两比较,重复的元素都赋值为None,最后统一删除(remove)。

Answer2:

def removeDuplicates(nums):
    nums = set(nums)
    nums = list(nums)
    nums.sort()
    return(len(nums))

用set的性质(不含重复元素)删除重复的元素。

ps:提交答案时一直报错,但我没有排查出错误?^?而且也不觉得有错误,欢迎大家讨论和指正!

Answer3:

def removeDuplicates(nums):
    if len(nums) == 0: return 0
    i = n = 0
    for j in range(1,len(nums)):
        if nums[i] != nums[j]:
            i = j
            n += 1
    return n+1,nums

根据提示写出来的答案,似乎只能得到元素个数,不能得到不包含重复元素的nums,这个也欢迎大家讨论和指正!

——曾经的小小少年,如今又大又圆 

猜你喜欢

转载自www.cnblogs.com/jialinliu/p/12760042.html