删除数组中的重复元素,并返回去重的数组之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 @   今夜无风  阅读(1250)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示