删除数组中的重复元素,并返回去重的数组之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]))

结果展示:

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM