我有一个函数来查找排序数组s
中是否有数字加起来给定的总和x
。我想知道这个函数的重要性是什么。我认为它在O(n)中运行,但我不确定。
功能:
def sumInside(s, x):
# Two indices that will be compared
l = 0
r = len(s) - 1
# Go through the array for the elements
while l < r:
if s[l] + s[r] == x:
return True
elif s[l] + s[r] < x:
l += 1
else:
r -= 1
return False
答案 0 :(得分:3)
是的,O(n)
最坏的情况
最糟糕的情况是,你的元素是最右边的(我必须一直向右递增),这将是n
次。
如果它位于最左侧O(1)
,您可以在第一次尝试时找到它。当l = 0
。
让我们说理论上,平均情况x总是在中间,它需要n / 2次迭代,即O(n)
。
最佳:O(1)
Avg:O(n)
最差:O(n)
答案 1 :(得分:2)
两条经验法则:
第一个问题的答案是n
。你有一个循环,它会遍历整个数据一次。
第二个问题也很容易回答。您在每个循环中进行比较,这是一个恒定的时间操作。
总的来说,在最坏的情况下,您的函数会以线性时间运行 - O(n)
。