1. LeetCode原题,题目是:
    给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
  2. 两种解决方法:
    ① 逐一检查数组中的元素,与前一个元素比较相等则其后所有数组往前挪一位,时间复杂度为O(n2)
    ② 使用两个指针,一个指向第一次出现的新元素,第二个指向第一个指针的后一位元素,然后逐个比较是否相等,相等则继续后移直到不相等则将此元素移入第一个指针的后一位,接着两个指针都向后走一步O(n)比较上述两种方法,第二种方法较优,最终选择第二种方法解
  3. 实现代码:
class Solution(object):
def removeDuplicates(self, nums):
    """
    :type nums: List[int]
    :rtype: int
    """
    length=len(nums)
    if length<2:
        return length
    left,right=0,1
    # 跳出while只有两种可能
    # 1、right==length-1
    # 2、nums[left]!=nums[right]
    # 3、或者right==length-1 and nums[left]!=nums[right]
    while True:
        while nums[left]==nums[right] and right<(length-1):
            right+=1
        if right==length-1:
            if nums[left]!=nums[right]:
                nums[left+1]=nums[right]
                return left+2
            else:
                return left+1
        else:
            nums[left+1]=nums[right]
            left+=1
            right+=1
  1. 结果:
  2. python 数组去重复 python去除数组中的重复元素_算法

  3. 总结:
    虽说这是一道比较简单的题目,但从看题到代码提交完成,还是花了快40多分钟。对于算法新手的我来说,一道题目完完整整的想出思路还是有些难,特别是在边界这部分,脑子很难转过弯,要重复想特别多遍。但结果我还是比满意吧,虽然是简单的题目,但通过自己努力写出来,还是挺有成就感的,一点点进步吧!