对二分思想的体会以及结对编程的感想

二分查找可以在有序的支持随机访问的容器中快速查找某个元素的信息
时间复杂度: \(O(logN)\)

原始版本:
递归实现:

int binarySearch(int a[],int val,int l,int r)
{
    if(l > r) return -1;
    
    int m = l + r >> 1;
    if (val == a[m])
        return m;
    else if (val < a[m])
        return binarySearch(a,val,l,m-1);
    else
        return binarySearch(a,val,m+1,r);
}

非递归实现:

int binarySearch(int a[],int val,int l,int r)
{
    int m, ret = -1;
    while(l <= r)
    {
        m = l + r >> 1;
        if (val == a[m])
        {
            ret = m;
            break;
        }
        else if(val < a[m]) 
            r = m - 1;
        else 
            l = m + 1;
    }
    return ret;
}

C++ STL中提供了三种二分查找函数
1、binary_search(f1,f2,val)
    返回区间\([f1,f2)\)中是否存在val,存在则返回\(true\),否则返回\(false\)

2、****lower_bound(f1,f2,val)****
  返回区间\([f1,f2)\)中第一个大于等于\(val\)的元素的下标
丑陋的实现:

int my_lower_bound(int a[],int val,int l,int r)
{
    int m;
    while(l < r)
    {
        m = l + r >> 1;
        if(val <= a[m])
            r = m;
        else
            l = m + 1;
    }
    return l;
}

3、****upper_bound(f1,f2,val)****
  返回区间\([f1,f2)\)中第一个大于\(val\)的元素的下标
丑陋的实现:

int my_upper_bound(int a[],int val,int l,int r)
{
    int m;
    while(l < r)
    {
        m = l + r >> 1;
        if(val < a[m])
            r = m;
        else
            l = m + 1;
    }
    return l;
}

需要注意的是传入的区间都是左闭右开

结对编程感想:
两人一起写代码时因为思路和代码风格的差异,往往会难以理解对方的代码。
结对编程提高了我阅读别人代码的能力,同时我也更注重自身代码的规范,尽量清晰易懂,让同伴方便阅读。

转载于:https://www.cnblogs.com/Apale/p/9786167.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值