【发布时间】:2021-09-29 15:51:33
【问题描述】:
假设我们在一个连续整数序列中缺少两个项目,并且缺少的元素位于第一个和最后一个元素之间。我确实编写了一个完成任务的代码。但是,如果可能的话,我想使用更少的循环来提高效率。任何帮助将不胜感激。另外,当我们必须找到更多丢失的项目(比如接近 n/4)而不是 2 时,情况会怎样。我认为我的代码应该是高效的,因为我更早地脱离了循环?
def missing_elements(L,start,end,missing_num):
complete_list = range(start,end+1)
count = 0
input_index = 0
for item in complete_list:
if item != L[input_index]:
print item
count += 1
else :
input_index += 1
if count > missing_num:
break
def main():
L = [10,11,13,14,15,16,17,18,20]
start = 10
end = 20
missing_elements(L,start,end,2)
if __name__ == "__main__":
main()
【问题讨论】:
-
如果我不知道我要查找的缺失值,在这种情况下我该如何使用二分查找?
-
不完全是二分查找,但是如果 L[index] == L[bottom] + (index - bottom),你可以推断出底部和索引之间的列表部分是完全连续的。这与将列表分成两部分相结合应该给出亚线性解决方案。
-
分而治之,我喜欢这个主意。
-
@LieRyan 谢谢似乎是个好主意。
-
@vkaul11:我已经发布了一个完整的解决方案,扩展了我上面的评论。