我有一个作业问题要编写一个函数,该函数是bagOfWords类的一部分,以从未排序的列表中删除值的实例。我们可以使用的列表操作不包括remove()。我们只需要O(n)复杂度,而朴素的算法就不能很好地执行。
我尝试过一种幼稚的算法。这太复杂了。它使用list.pop(index)本身具有O(n)复杂度,并且具有两个循环。由于不允许使用list.remove(),并且由于列表理解将具有相同的复杂性,但语法更加简洁,因此我试图找到一种更好的实现。
我认为解决方案可能是快速排序算法,因为如果我首先对列表进行排序,我可能可以做到O(n)复杂性。但是,如何在没有pop(index)复杂性的情况下删除该项目?现在我想知道通过KMP算法搜索模式是解决方案还是散列。
def remove(self, item):
"""Remove all copies of item from the bag.
Do nothing if the item doesn't occur in the bag.
"""
index = 0
while index < len(self.items):
if self.items[index] == item:
self.items.pop(index)
else:
index += 1
Run Code Online (Sandbox Code Playgroud)
复杂度是二次的。但是,我想要的复杂度是O(n)
编辑:澄清一下,我们实际上仅限于修改现有列表。
我有一个列表,比如说:list = [6,2,6,2,6,2,6],并且我希望它创建一个新列表,其中每个其他元素乘以2,每个其他元素乘以1(保持不变)。结果应为:[12,2,12,2,12,2,12]。
def multi():
res = 0
for i in lst[0::2]:
return i * 2
print(multi)
Run Code Online (Sandbox Code Playgroud)
也许像这样,但我不知道该如何发展。我的解决方案怎么了?