查找复杂度为o-small(n)的第一个大整数的算法

时间:2018-10-20 13:58:49

标签: algorithm big-o

我需要编写一种算法,该算法将找到第一个整数,该整数大于排序数组中x的整数,整数可以重复。该算法应具有o(n)的复杂度,其中o小。难度为O(n)和o(n)的算法之间有什么区别?

3 个答案:

答案 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