def A(number) :
for item in range(len(number)) :
if number.count(item) < 2 : # определяю уникальный или нет
number[item] *= 0 # превращаю уникальный в ноль
for i, elem in enumerate(number) :
if elem == 0 :
del number[i] # если ноль - удаляю
return number
给定一个非空整数数组。有必要返回一个仅由该数组的非唯一元素组成的数组。为此,您需要删除所有唯一元素(此数组中仅存在一次)。您不能更改元素的原始顺序。
我的代码有效,但只删除了第一个唯一元素,并没有触及其余部分。为什么,我不知道,但我想知道。
如果给出 [1, 2, 3, 3, 3],则应返回 -[3, 3, 3]。它返回 - [2, 3, 3, 3]。
O(n)新列表返回的时间和内存( -time, -memory)的线性算法O(n),包含多次出现的元素,保留原始列表的顺序:问题示例:
如果相同的元素总是在附近,则可以使用仅使用持久内存(-time
O(n),O(1)-memory)的一次性算法:例子:
collections.Counter
在这片里
您正在从要迭代的列表中删除元素。你不能这样做,否则,删除元素后,循环将跳过下一个元素(因为删除前一个元素后,它移动到它的位置)。
因此,有些元素并没有从你身上移除——在循环中它们只是溜走了。
通常,您应该尽可能尝试用列表表达式替换循环。
例如,您的函数可以写成一行: