读书
简洁与性能:鱼和熊掌
对于最小的可分配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; }
例如
浙公网安备 33010602011771号