删除数组中的重复元素,并返回去重的数组之Python解法

题目:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
解法:采用双指针,遍历数组,发现两个值相等,移动指针,发现两个值不相等,互换位置保证指针走过的地方都是不重复的数

def handler(li):
    """双指针方法"""
    if not li or len(li) == 0:
        return 0
    i = 0
    res = [li[0]]
    for j in range(1, len(li)):
        if li[i] != li[j]:
            i += 1
            li[i] = li[j]
            res.append(li[i])
    return i+1,res


def handler_01(li):
    """元素弹出法"""
    if not li or len(li) == 0:
        return 0
    i = 0
    j = 1
    while j <= len(li) -1:
        if li[i] == li[j]:
            li.pop(j)
        else:
            i += 1
            j += 1
    return len(li)


if __name__ == '__main__':
    print('删除重复后列表长度及列表内容', handler([1,2,3,3,4,5]))
    print('删除重复后列表长度', handler_01([1,2,3,3,4,5]))

结果展示:

 

posted @ 2021-04-22 20:22  今夜无风  阅读(1245)  评论(0编辑  收藏  举报