给定一个长度为n的列表,我需要在时间复杂度为O(log(n))的情况下找到列表中最大数字的索引,而不使用python的内置max方法。以下是我的尝试,但是我收到了错误
ValueError: 0 is not in list
就行了
return n.index(find_max_number(n))
当我运行我的代码时。对我的代码和替代解决方案的反馈将不胜感激。
def find_maximum(n):
b = find_max_number(n)
return n.index(b)
def find_max_number(n):
middle = len(n)//2
if len(n) == 1 :
return (n[0])
if len(n)>2:
if n[middle] > n[middle-1] and n[middle] > n[middle+1] :
return (n[middle])
if (n[middle-1] < n[middle]):
return find_maximum(n[middle:])
else :
return find_maximum(n[:middle])
答案 0 :(得分:1)
只需使用Python的max
来查找列表中的最大数字,然后使用.index()
就像获取索引一样。
<强>代码强>
n = [2, 3, 4, 5]
def greatest_num_index(n):
return n.index(max(n))
print(greatest_num_index(n))
<强>退出
3
如果您不允许使用max:
将greatest_num
初始化为n[0]
至max&lt; 0.
def max_num(n):
greatest_num = n[0]
for item in n:
if item > greatest_num:
greatest_num = item
return greatest_num
这通过遍历list
中的每个元素来进行,测试它是否大于当前最大数字,如果是,则将最大数字设置为当前数字。
答案 1 :(得分:1)
您可以简化您的功能find_max_number
:
def find_max_number(numbers):
max_ = float('-inf')
for number in numbers:
if number > max_:
max_ = number
return max_
或者,你可以直接找到索引:
def find_maximum(numbers):
max_ = float('-inf')
max_index = None
for index, number in enumerate(numbers):
if number > max_:
max_ = number
max_index = index
return max_index