码迷,mamicode.com
首页 > 其他好文 > 详细

40亿个有序不同的数的文件中找一个缺失的数

时间:2014-11-08 23:32:34      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:blog   sp   for   文件   div   log   代码   bs   amp   

编程珠玑第二题。。。

如果是用位图的话。。。

如果内存不够,那么就需要二分,注意思想就是先找到中间数mid,然后把文件以mid分为两个文件,肯定丢失的数在数目小的那个文件中,然后递归去那个小的文件中找就行了。

复杂度是o(2n)  n+n/2+n/4+n/8+.....

看了别人写了一个代码:

int split(int* a, int* b, int*c, int alen, int bit)
{
    int biter, citer, i;
    int v=0, re = 0, *t;

    while(bit--){
        v = (1 << bit);
        for(i=biter=citer=0; i < alen; i++) {
            if(a[i] & (1<<bit)) {
                b[biter++] = a[i];
            } else {
                c[citer++] = a[i];
            }
        }
        if(biter <= citer) {
            re += v;
            t = a;
            a = b;
            b = t;
            alen = biter;
        } else {
            t = c;
            c = a;
            a = t;
            alen = citer;
        }
    }
    return re;
}

  

40亿个有序不同的数的文件中找一个缺失的数

标签:blog   sp   for   文件   div   log   代码   bs   amp   

原文地址:http://www.cnblogs.com/juandx/p/4084133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!