如何解决在Ologn复杂度中找到最高的数
def peak(arr,n):
l = 0
r = n-1
while(l<=r):
m = l + (r-l)//2
if m>0 and m<n-1:
if arr[m+1]<arr[m] and arr[m]>arr[m-1]:
return arr[m]
elif arr[m+1]>arr[m] and arr[m]>arr[m-1]:
l = m+1
elif arr[m+1]<arr[m] and arr[m]<arr[m-1]:
r = m-1
elif m>0 and m>=n-1:
if arr[m]>arr[m-1]:
return arr[m]
elif m<=0 and m<n-1:
if arr[m+1]<arr[m]:
return arr[m]
问题是- 给定数组的方式是,存储在数组中的元素最初按升序排列,然后在达到峰值元素之后,存储的元素按降序排列。找到最高的元素。
示例: 输入:
11
1 2 3 4 5 6 5 4 3 2 1
5
1 2 3 4 5
输出: 6 5
谁能告诉我我的代码出了什么问题?
解决方法
问题在于,代码中的条件无法解决数组中只有一个元素的情况,即n
为1
的情况。当发生这种情况时,所有条件都不成立,while
循环变成无限循环。
您可以通过简单地默认返回arr[m]
来解决此问题:
while(l<=r):
m = l + (r-l)//2
if m>0 and m<n-1:
... # your existing code
else:
return arr[m]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。