面试题1:Delete Nth——删除列表中N个以上的重复元素

给定列表list和数字N,创建一个新列表,其中元素最多包含n次而无需重新排序。例如,如果N = 2,输入为[1,2,3,1,2,1,2,3],先保留前面的[1,2,3,1,2],然后删除接下来的[1,2],因为这会导致1和2在结果中3次,然后取3,最终结果为[1,2,3,1,2,3]。
首先说一个时间复杂度O(n^2)的方法:

# Time complexity O(n^2)
def delete_nth_naive(array, n):
    ans = []
    for num in array:
        if ans.count(num) < n:
            ans.append(num)
    return ans

然后,可以使用哈希表使得时间复杂度将为O(n):

# Time Complexity O(n), using hash tables.
def delete_nth(array, n):
    result = []
    counts = collections.defaultdict(int)  # keep track of occurrences

    for i in array:
        if counts[i] < n:
            result.append(i)
            counts[i] += 1

    return result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值