读书

简洁与性能:鱼和熊掌

对于最小的可分配ID问题,递归的深度未O(lgn),于是调用栈的大小也是O(lgn),因此空间复杂度并不能忽略。我们可以将递归转换为迭代来避免空间上的占用。

int min_free(int* xs,int n){
    int l=0;
    int u=n-1;
    while(n){
        int m= (1+u)/2;
        int right,left=0;
        for(right=0;right<n;++right)
            if(xs[right]<=m)    {
                swap(xs[left],xs[right]);
                ++left;
            }
        if(left==m-1+1){
            xs=xs+left;
            n=n-left;
            l=m+1;
            }else{
                n=left;
                u=m;
            }
        }
        return 1;
}

 

例如

posted @ 2022-02-25 10:54  行呗  阅读(27)  评论(0)    收藏  举报