`
ZeaLoVe
  • 浏览: 89754 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

第二篇 二分查找 和 最大公约数 实现

阅读更多
继续灌水,这次记录的是这两个面试笔试常出现的问题,记得很早时候在CSDN上看了一篇文章,大意是所谓的程序员 有90%无法一次写出正确的二分查找,当时很不以为然的,结果大三时候去腾讯实习生面试的时候,一面被被这题彻底打败了。。当时顿时就服了。其实简单的东西透着大道理,往往通过和一个人简单的交谈就可以看出这个人的水平如何,因为基础扎实是不需要解释的。。嗯,所以需要努力打基础。
废话不说了直接上代码,本来在自己的电脑里有一份的,机房没有,所以现写一个,但以为能秒杀的事情似乎不那么简单,一写也让我发现原来版本其实很多问题没有完善,Bug还是很多啊,汗颜。调试了10分钟才搞定这个,更说明了简单的事情其实不容小觑的。

int Bsearch( int *a , int left , int right , int value )//二分查找,返回value所在数组a的index
{
	if( a[ right ] <value || a[ left ] > value ) return -1;//加这一句好处多多
	int mid;
	while( left <= right )
	{
		mid = left + ( right - left ) / 2; // 直接mid=(left+right)/2 可能导致加法溢出

		if( a[ mid ] == value )//找到
		{
			return mid;
		}
		else if( a[ mid ] < value )//比中间值大说明要找的在右边
		{
			left = mid + 1 ;
		}
		else//比中间值小说明在左边
		{
			right = mid -1;
		}
	}
	return -1;//没找到
}

这道题其实有两种变体的,一个就是找到 最接近value的小于它的值
另一个是找到 最接近value的大于它的值

第二个是求两个数的最大公约数,这个也是常见的,简单但不好一次搞定的题目。。
int gcd( int a , int b )//最大公约数
{
	if( a < b ) // 保证顺序是前一个参数>后一个参数
	{
		swap( a , b );
	}
	while( b != 0 )// 辗转取余
	{
		int tmp = a ;
		a = b ; //b代替a
		b = tmp % b ;//a%b 代替b
	}
	return a;
}
分享到:
评论

相关推荐

    计算机考研机试攻略 - 高分篇(试读).pdf

    3.2 最大公约数(GCD) 72 3.3 最小公倍数(LCM) 74 3.4 斐波那契数列 75 3.5 素数判定 76 3.6 素数筛选 78 3.7 分解素因数 81 3.8 二分快速幂 83 3.9 常见数学公式总结 85 3.10 规律神器OEIS 87 第四章 ...

    我用Python写的一些算法

    二分查找算法 第k小数选择算法 随机第k小数选择算法 计算集合中两个元素的和和一个数相等 ##动态规划 使用分治法的最大子数组(应该算成分治法) 使用自底向上方法实现的最大子数组 使用动态规划的两种方式实现的...

    《妙趣横生的算法(C语言实现)》(杨峰 编著)

    5.2 求两个数的最大公约数和最小公倍数 5.3 歌德巴赫猜想的近似证明 5.4 三色球问题 5.5 百钱买百鸡问题 5.6 判断回文数字 5.7 填数字游戏求解 5.8 新郎和新娘 5.9 爱因斯坦的阶梯问题 5.10 寻找水仙花数 5.11 猴子...

    C/C++常用算法手册.秦姣华(有详细书签).rar

    “第2篇算法基本应用篇”详细讲解了算法在排序、查找、数值计算、数论、经典趣题和游戏中的应用;“第3篇算法高级应用篇”讲解了算法的一些高级应用技术,包括在密码学和数据压缩/解压缩中的应用。 《C/C++常用算法...

    算法导论(part1)

    第二部分 排序和顺序统计学 引言 第6章 堆排序 6.1 堆 6.2 保持堆的性质 6.3 建堆 6.4 堆排序算法 6.5 优先级队列 第7章 快速排序 7.1 快速排序的描述 7.2 快速排序的性能 7.3 快速排序的随机化...

    ACM 内部预定函数

    4.二分查找 高精度运算专题: 1.本专题公共函数说明 2.高精度比较 3.高精度加法 4.高精度减法 5.高精度乘10 6.高精度乘单精度 7.高精度乘高精度 8.高精度除单精度 9.高精度除高精度

    算法导论(part2)

    第二部分 排序和顺序统计学 引言 第6章 堆排序 6.1 堆 6.2 保持堆的性质 6.3 建堆 6.4 堆排序算法 6.5 优先级队列 第7章 快速排序 7.1 快速排序的描述 7.2 快速排序的性能 7.3 快速排序的随机化...

    ACM算法模板和pku代码

    最大公约数 a^b mod n 扩张欧几里德算法 素数表质因子分解 Stirling公式 中国剩余定理 欧拉数(递推法) 欧拉数(公式法) 十进制转负进制 归并排序求逆序数 Pell方程 Catalan数,100以内 欧拉函数讲解 组合...

    java自学之道

    2.7 求最大公约数与最小公倍数 2.8 完全平方数 2.9 统计字母、空格、数字和其它字符个数 2.10 求主对角线之和 2.11 完数求解 2.12 求s=a+aa+aaa+aaaa+aa...a的值 2.13 高度计算 2.14 乘法口诀 2.15 无重复三位数 ...

    浙江大学C语言上机练习题附答案

    40011 求最小公倍数和最大公约数(调试示例error04_1) 32 40012 求1-1/4+1/7-1/10+1/13-1/16+…… 33 40014 求整数的位数 34 40023 换硬币 35 40024 找出各位数字的立方和等于它本身的数 36 40025 找完数...

    c程序设计习题参考(谭浩强三版)习题参考解答

    6.1输入两个正整数m和n,求其最大公约数和最小公倍数。 17 6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数。 18 6.3 18 6.4求∑n!(即求1+2!+…+20!)。 19 6.5求 19 6.6打印出所有的“水仙...

    ACM常用代码

    数学问题: 1.精度计算——大数阶 乘 2.精度计算——乘法 (大数乘小数) 3.精度计算——乘法 (大数乘大数) 4....5.精度计算——减法 6....二分查找 数据结构: 1.顺序队列 2.顺序栈 3.链表 4.链栈 5.二叉树

    ACM 算法经典代码 数据结构经典代码

    目录 一.数论 4 1.阶乘最后非零位 4 2. 模线性方程(组) 4 3. 素数表 6 4. 素数随机判定(miller_rabin) 6 5. 质因数分解 7 ...4.二分查找 数据结构: 1.顺序队列 2.顺序栈 3.链表 4.链栈 5.二叉树

    acm常用代码及算法

    acm常用代码及算法,对我的帮助很大 1.精度计算——大数阶乘 ...二分查找 数据结构: 1.顺序队列 2.顺序栈 3.链表 4.链栈 5.二叉树 一、数学问题 1.精度计算——大数

    高效算法:竞赛、应试与提高必修128例.[法] Christoph Dürr Jill-Jênn Vie(带书签文字版).pdf

    1 6 7 二分查找 23 1 7 建议 25 1 8 走得更远 27 第 2 章 字符串 28 2 1 易位构词 28 2 2 T9:9 个按键上的文字 29 2 3 使用字典树进行拼写纠正 31 2 4 KMP(Knuth-Morris-Pratt)模式匹配算法 33 2 5 最大边的 KMP ...

Global site tag (gtag.js) - Google Analytics