我需要编写一种算法,该算法将找到第一个整数,该整数大于排序数组中x的整数,整数可以重复。该算法应具有o(n)的复杂度,其中o小。难度为O(n)和o(n)的算法之间有什么区别?
答案 0 :(得分:2)
您可以使用二进制搜索方法来找到x
的第一个最大整数。会在O(log(n)) = small_o(n)
中。
答案 1 :(得分:1)
这是big-o和little-o表示法的很好很好的解释: Difference between Big-O and Little-O Notation
最简单而有效的算法是@OmG提到的Binary Search,这是开始的链接: https://en.wikipedia.org/wiki/Binary_search_algorithm
这个想法很简单:您只需将搜索的数字与数组的中间元素进行比较,如果中间的数字小于您的数字,很显然您需要在右半边找到,否则在左半边找到。当只有一个元素时,您将停止。
答案 2 :(得分:1)
正如人们在我之前指出的那样,您想进行二进制搜索。这篇文章包括示例代码:
在python中,使用bisect函数最简单: https://docs.python.org/2/library/bisect.html
from bisect import bisect_right
def find_gt(a, x):
'Find leftmost value greater than x'
i = bisect_right(a, x)
if i != len(a):
return a[i]
raise ValueError