算法确定数组的长度

时间:2011-02-01 04:33:16

标签: algorithm

描述了一种可以在O(log n)中确定数组长度的算法。

2 个答案:

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