我在Java
;
int foo(int a[], int n) {
int num1 = 1, num2 = 1;
while(num1 < n) {
if (binarySearch(a,num1,num2) >= 0) {
return num2;
}
num1 = 2 * num1;
num2 = 2 * num2;
}
return 0;
}
我试图弄清楚这个功能的时间复杂性和空间复杂性。我知道binarySearch
的时间复杂度为O(logn)
,此函数的空间复杂度为O(1)
。有了这些信息,我试着从foo
函数中计算出这些东西。我认为foo
的时间复杂度为O((logn)^2)
,空间复杂度为O(1)
,但我不确定。计算这些东西的最佳方法是什么?
答案 0 :(得分:0)
让我们在没有while
调用的情况下分析简化的binarySearch()
循环:
while(num1 < n) {
num1 = 2 * num1;
}
根据n
?
一旦你回答了这个问题,最终解决方案的关键是要认识到while循环的复杂性会增加其身体的复杂性。这意味着最终答案是上述问题时间log n
的答案。