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
#算法工程师#