Non-unique Elements

Question:

你将得到一个含有整数(X)的非空列表。在这个任务里,你应该返回在此列表中的非唯一元素的列表。
要做到这一点,你需要删除所有独特的元素(这是包含在一个给定的列表只有一次的元素)。
解决这个任务时,不能改变列表的顺序。
例如:[12313] 1和3是非唯一元素,结果将是 [1, 3, 1, 3]。

输入:一个含有整数的列表。

输出:一个含有不唯一元素的整数列表。

范例:

        checkio([1, 2, 3, 1, 3]) == [1, 3, 1, 3]
        checkio([1, 2, 3, 4, 5]) == []
        checkio([5, 5, 5, 5, 5]) == [5, 5, 5, 5, 5]
        checkio([10, 9, 10, 10, 9, 8]) == [10, 9, 10, 10, 9]

code 1:

def checkio(data: list) -> list:
    lenth = len(data)
    list = []
    for i in range(lenth):
        for j in range(lenth):
            if i == j:
                continue
            else:
                if data[i] == data[j]:
                    list.append(data[i])
                    break
    return list

code 2:

def checkio(data: list) -> list:
    lenth = len(data)
    list = []
    for i in range(lenth):
        count=data.count(data[i])
        if count != 1:
            list.append(data[i])
            
    return list

code 3:(from checkio users: eiji

def checkio(data):
        return [i for i in data if data.count(i) > 1]

code 4: (from checkio users: odwl)

def checkio(data):
    uniques = set()
    dupes = set()
    for x in data:
        if x in uniques: dupes.add(x)
        else: uniques.add(x)    
    return [x for x in data if x in dupes]

总结:

code1,code2以及code3总体上看,算法思想基本相同,但code3更为简洁。而code4虽然看上去不如code3简洁,但四个程序中,它的算法时间复杂度最低,最为有效。code4的算法时间复杂度为o(n),其它的都为o(n*2).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值