1.1基础编程模型

一:辗转相除法求最大公约数

不知道辗转相除法的戳这里

这个简单的程序,涉及到了递归的思想,我们来看一下:

int gcd(int p, int q)
{
    if(q==0) return p; //一定有一个触底反弹
    int r = p % q;
    return gcd(q, r); //问题规模越来越小,且子问题与父问题无交集
}

如果你对于递归不是特别了解,我强烈建议你在自己的编译器中去断点调试一下,看看发生了什么

二:二分查找

这是一个非常经典的查找,注意前提一定得是有序列,然后你要注意分界(这里不考虑重复元素):

//在vec中寻找元素等于tar的,返回其下标,如果找不到就返回-1
int BinarySearch(vector vec, int tar)
{
    int low = 0, high = vec.size()-1;
    while(low 一个元素也要找啊
    {
        int mid = (low + high) / 2; //问题二:不整除呢->不要紧,前半段多一个
        if(vec[mid]<tar) {low = mid + 1;}
        else if(tar < vec[mid]) {high = mid - 1;} //别忘了+1啊
        else {return mid;} //找到
    }
    return -1;
}

注意点我都写在上面了,你可以考虑下这个代码健壮性够不够,比如我如果输入的是空vector

#算法工程师#
全部评论
棒!
点赞 回复 分享
发布于 2017-01-12 10:59
为什么high=mid+1而不是mid-1?
点赞 回复 分享
发布于 2017-01-11 19:24

相关推荐

头像
10-22 19:18
上海大学 后端
jopajhhdjwnqk:水印都叠杀人书了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务