描述了一种可以在O(log n)中确定数组长度的算法。
答案 0 :(得分:2)
确定。我会将上面的评论作为答案发布,尽管你的问题很模糊。
逐步执行i = 1,2 ^ 1,2 ^ 2,... 2 ^ m,直到出现 ArrayIndexOutofBounds 错误。
然后在2 ^(m-1)和2 ^ m之间搜索二进制文件,直到找到错误消失的边界。那是。
是O(logn)
修改
此建议基于您作为评论发布的代码段,很明显您可以检测 ArrayIndexOutofBounds
答案 1 :(得分:0)
C样式伪代码:
int lengthOfArray(p){
int j = 1;
try{
while(j < Integer.MaxValue){
p[j]; // Might need to do something more with p[i]
// to test bound.
j *= 2;
}
}catch(ArrayIndexOutOfBounds e){
}
j = searchArrayHelper(p, j/2, j);
try{
while(1){
// This loop is guaranteed to run O(log n) times or less.
p[j];
j++;
}
}catch(ArrayIndexOutOfBounds e){
j--;
}
return j;
}
int searchArrayHelper(p, int i, int j){
try{
p[j];
} catch (ArrayIndexOutOfBounds e){
int mid = (i + j)/2;
return searchArrayHelper(p, i, mid);
}
return i;
}