给定列表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