列表在空间复杂度为O(1)的情况下进行去重

题目

  • 一个列表在空间复杂度为O(1)的情况下进行去重,要求去重后里面元素顺序不改变
  • 原题
  • 无序列表去重并保持原来顺序
  • 空间复杂度为O(1)
    list_num = [7, 2, 2, 3, 1, 2, 5, 1, 6, 4, 3, 7] -> [7, 2, 3, 1, 5, 6, 4]

解题思路分析

  • 首先我们发现有两个限制条件:1.保持原来顺序 2.空间复杂度为O(1)
  • 需求是去重

从以上两个限制可以看出来,我们使用 set 集合方式是不行,新建一个新列表装数据也不行,只能在原来的列表上进行操作

代码实现

"""
实现思路:1.通过多重循环列表里面的元素
        2.一重遍历列表
        3.二重判断当前遍历元素后面是否存在重复元素,存在时移除
"""
def list_to_repeat(_list: list):
    if not isinstance(_list, list):  # 判断传入是否为列表
        raise Exception("传入的{}不是列表".format(_list))

    if len(_list) < 2:  # 判断列表是否为空或者一个元素,是,直接返回,不需要进行去重
        return _list
    else:
        for nums in _list:
            if not isinstance(nums, int):
                raise Exception("列表里面存在非int整数,数据 {} 为 {} 类型".format(nums, type(nums)))
            i = _list.index(nums) + 1
            while i < len(_list):
                if i >= len(_list):
                    break
                elif _list[i] == nums:
                    _list.pop(i)
                    i = i -1
                else:
                    pass
                i = i + 1
    return _list
 
"""
简单的进行测试
1. _list = [7, 2, 2, 3, 1, 2, 5, 1, 6, 4, 3, 7]
2. _list = "111"
3. _list = []
4. _list = [1]
5. -list = [1,1,1,1,1,1]
6. -list = [2,1,1,1,1,1,1]
7. -list = [1,1,1,[1],1,1]
8. -list = [2,1,1,3,"4",5]
"""
# 结果都是没有问题

以上为内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处!

如果觉得文章不错,欢迎关注微信公众号,微信公众号每天优先推送相关测试技术文章
个人微信号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试之路king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值