我很难确定解决方案的时间复杂程度
任务是找到 An 序列的 n 值 - 1,3,5,11,21,43 ......
A0 = 1
A1 = 3
An =(An-1)+ 2 *(An-2)
序列是"隐藏"在排序的数组中。
例如,以下数组 -
1 ,2, 3 ,4, 5 , 11 ,17, 21 ,40,65
将返回4,因为A4 = 21,而21是给定数组中出现的序列的最后一个数字。
并为下一个数组 -
-3,-2,0,10,11,17,21,60
该方法将返回-1,因为A0不在数组中。
我的代码:
public static int elements(int[] arr)
{
int i=1, j=3, k, tmp;
int a=-1;
tmp =indexOf(arr, i);
if(tmp==-1)
return a;
a++;
tmp=indexOf(arr,j);
if(tmp==-1)
return a;
a++;
k=(2*i)+j;
tmp=indexOf(arr,k);
while(tmp!=-1)
{
tmp=indexOf(arr,k);
a++;
i=j;
j=k;
k=(2*i)+j;
}
return a-1;
}
indexOf()
是O(log n)二进制搜索。
答案 0 :(得分:1)
在while
循环中,搜索空间永远不会减少,因为arr
使用了相同的参数indexOf
。在最坏的情况下,这意味着arr
包含序列A
的开始间隔,并使用n
次搜索,其中n
是{{1}中的元素数量}}。总的来说,这会产生arr
的最坏情况运行时复杂性。