频道栏目
首页 > 资讯 > Java > 正文

二分的姿势=_=

14-12-03        来源:[db:作者]  
收藏   我要投稿

二分查找:


1:大于等于xx的第一个数

int bin_s(int xx)
{
        int l=1,r=10;
        int ans=-1;
        while(l<=r){
                int m=(l+r)>>1;
                if(a[m]>=xx) ans=m,r=m-1;  //!!!
                else l=m+1;
        }
        return ans;
}
e.g:  int a[]={0,1,2,5,5,5,5,7,8,9,10};
in:           5
out:        3
2:大于xx的第一个数
int bin_s(int xx)
{
        int l=1,r=10;
        int ans=-1;
        while(l<=r){
                int m=(l+r)>>1;
                if(a[m]>xx) ans=m,r=m-1;  //!!!
                else l=m+1;
        }
        return ans;
}
e.g:  int a[]={0,1,2,5,5,5,5,7,8,9,10};
in:           5
out:        7


3:小于等于xx的第一个数(接近xx)
int bin_s(int xx)
{
        int l=1,r=10;
        int ans=-1;
        while(l<=r){
                int m=(l+r)>>1;
                if(a[m]>xx) r=m-1;
                else ans=m,l=m+1;
        }
        return ans;
}

e.g:  int a[]={0,1,2,5,5,5,5,7,8,9,10};
in:           5
out:        6

4:小于xx的第一个数(接近xx)
int bin_s(int xx)
{
        int l=1,r=10;
        int ans=-1;
        while(l<=r){
                int m=(l+r)>>1;
                if(a[m]>=xx) r=m-1;
                else ans=m,l=m+1;
        }
        return ans;
}
e.g:  int a[]={0,1,2,5,5,5,5,7,8,9,10};
in:           5
out:        2




相关TAG标签
上一篇:背包问题--求第K大值
下一篇:Delphi 提取TXT中的Email 数据
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站