力扣80.删除重复元素2

给你一个有序数组 nums ,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。

不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

思路:用双指针,一个i来控制位置,j来遍历。

如果len(nums)<=2,说明前两个都符合要求,因为重复元素不超过两个。i用来控制位置,将nums[j]与nums[i-2]比较,如果不相等则将nums[j]移到i的位置上,即nums[i]=nums[j]。从0到i都是满足的,i到len(nums)都是不满足的,删除即可。

题解:

def remove_repeat_element(nums):
    n = len(nums)
    if n <= 2:
        return n
    i, j = 2, 2
    while j < len(nums):
        if nums[i-2] != nums[j]:
            nums[i] = nums[j]
            i = i+1
        j = j+1
    for k in range (i,len(nums)):
        del nums[i]
    return i, nums

 

posted @ 2023-03-06 10:45  软面包  阅读(34)  评论(0)    收藏  举报