对此有一些麻烦。我在下面列出了我所拥有的。当我提交它时,由于某种原因,它总是说“程序超时”。我不确定下一步该怎么做。它在一定程度上有效,即某些测试有效,而不是最后一个测试无效。你有什么建议?
我已经提供了问题的屏幕截图,以及到目前为止的内容。
这是类中的注释(伪代码),我只需要对其进行修改以对其进行修改,以在ordered_list中打印目标的首次出现。如果列表中不存在目标,则它必须返回None。
提前谢谢!
问题: 您将要编写Python函数的代码
binsearch首先(有序列表,目标)
如果给定一个非空有序的项目列表和一个目标项目,且所有目标项目均具有相同的类型,则返回该目标在列表中首次出现的索引(如果目标在列表中),否则返回None。 / p>
例如,因为第一个3位于索引1,所以调用binsearch first([1、3、3、7、9],3)应该返回1。类似地,调用binsearch first([1、3、3 ,7、9],9)应该返回4,而调用binsearch first([1、3、3、7、9],5)应该返回None。
除了可订购的物品外,您不可以假设其他任何有关物品类型的信息。例如,项目可以是字符串,并且调用binsearch first([“ Alice”,“ Bob”,“ Chloe”,“ Chloe”,“ Dave”],“ Chloe”)应返回2。
您的程序将进行效率和样式评估。为了获得满分,它可能只进行一次相等性测试(它可能只有一个“ ==”比较,此外,可能不在任何循环内)。也就是说,唯一的相等性测试发生在执行结束时,即返回之前。
限制:此问题不允许递归。允许使用除
以外的任何其他操作此外,您不是
和(一次)==
当然,与搜索相关的所有内置函数和库函数也是不允许的:您必须自己进行编码。
def binsearch_first(ordered_list, target):
left = 0
right = len(ordered_list) - 1
count = 0
while left <= right:
mid = (left + right) // 2
count = count + 1
if ordered_list[mid] == target:
while mid > 0 and ordered_list[mid - 1] == target:
mid = mid - 1
return mid
elif target < ordered_list[mid]:
right = mid - 1
else:
left = mid + 1
return None
答案 0 :(得分:1)
唯一适用于字符串和整数的运算符是<。 我们必须利用它是一个有序列表的事实-以递增顺序排列。
def binsearch(orderedlist,target):
candidate = 0
for i in range(len(orderedlist)):
if orderedlist[i] < target:
candidate = candidate
else:
if i+1 < len(orderedlist):
if orderedlist[i] < orderedlist[i+1]:
#it is an ordered list so if i+1 is not bigger than i, it must be equal
candidate = candidate
else:
candidate = i
break # can you use break?
if orderedlist[candidate] == target:
return candidate
else:
return None
答案 1 :(得分:0)
我不是计算机科学专业的学生,因此无法评论该计划的有效性,但是您可以使用简单的l = [1]
l[0] = 2 # I can mutate the list...
l = [2] # ... or I can create a new one
循环
for
其结果是:
def binsearch_first(ordered_list, target):
i=0
for ele in ordered_list:
if ele == target:
return i
break
else:
i+=1
return None
致谢