继续灌水,这次记录的是这两个面试笔试常出现的问题,记得很早时候在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;
}
分享到:
相关推荐
1. **最大公约数(Greatest Common Divisor, GCD)与最小公倍数(Lowest Common Multiple, LCM)**:在数论中,两个或多个非零整数的最大公约数是能够同时整除这些数的最大正整数。最小公倍数则是这些数共有的倍数中最小...
常用的查找算法有线性查找、二分查找和哈希查找。 1. **线性查找**:也称为顺序查找,是最简单直观的一种查找方法。它依次检查数组中的每个元素,直到找到目标值或者检查完所有元素。 2. **二分查找**:要求数组是...
6. **折半查找**:折半查找,也称为二分查找,是一种在有序数组中查找特定元素的高效算法。它每次将搜索范围减半,直到找到目标值或者确定其不存在。这种方法适用于大数据集,大大提高了查找效率。 7. **最大字段和...
一、最大公约数和循环次数 在算法分析中,最大公约数是非常重要的一个概念。在给定的部分内容中,讨论了如何计算最大公约数,并分析了程序的循环次数。例如,在第一个程序中,while 循环体做了 10 次,而在第二个...
这篇文档主要介绍了一些在ACM(国际大学生程序设计竞赛)中常见的数据结构和算法的经典代码实现,主要包括高精度运算、斐波那契数列、卡特兰数、最小公倍数、最大公约数、堆操作以及快速排序。下面将详细阐述这些...
2. **查找算法**:包括线性查找、二分查找、哈希查找等。二分查找在有序数组中具有较高的效率,而哈希查找则利用哈希函数实现快速定位。 3. **图算法**:如Dijkstra最短路径算法、Floyd-Warshall所有对最短路径算法...
1. **基础算法**:包括排序(快速排序、归并排序、堆排序等)、查找(二分查找、哈希查找等)以及递归和迭代等基本技巧。 2. **数据结构**:链表、数组、栈、队列、堆、树(二叉树、平衡树如AVL和红黑树)、图...
2. **排序与查找算法**:详细讲解快速排序、归并排序、堆排序、冒泡排序、插入排序、二分查找、哈希查找等算法,以及它们的时间复杂度和空间复杂度分析。 3. **图算法**:如Dijkstra最短路径算法、Floyd-Warshall...
6. 最大公约数、最小公倍数:实现了最大公约数和最小公倍数的计算。 7. 组合序列:实现了组合序列的计算。 8. 快速傅立叶变换(FFT):实现了快速傅立叶变换的计算。 9. Ronberg 算法计算积分:实现了 Ronberg 算法...
17. 公因数和公倍数:第29题(解决问题部分)询问国内展园数量是国际展园的几分之几,需要用到公倍数和比例知识。 18. 最大公约数和最小公倍数:第30题(解决问题部分)涉及到找两个数的最大公约数和最小公倍数。 ...
如果数据量较大,二分查找法在已排序的数组中寻找极值会更有效。 4. **矩阵最大**: 在矩阵运算中,寻找最大元素可能涉及到遍历矩阵并记录最大值。这可以通过简单的循环结构实现,或者利用多线程并行处理以提高...
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 第四章 ...
第2天:贪心算法和二分算法 * 贪心算法:贪心算法是一种近似算法,通过在每一步选择最优的解决方案来实现最优解。 * 二分算法:二分算法是一种查找算法,通过将查找空间减半来实现快速查找。 第3天:队列和栈 * ...
- 特殊形式的二分查找可以用来查找第一个大于等于给定值的位置。 28. **所有数位相加** - 所有数位相加问题可以通过简单的循环实现。 #### 数论算法 1. **递推求欧拉函数PHI(I)** - 欧拉函数φ(n)表示小于n...
7. 最大公约数、最小公倍数:实现最大公约数和最小公倍数的算法,可以用于计算两个数的最大公约数和最小公倍数。 8. 组合序列:实现组合序列的算法,可以用于生成组合序列。 9. 快速傅立叶变换(FFT):实现快速傅立...
本题要求实现一个其它算法,例如二分查找或快排。该题考察了学生对算法的理解和编程能力。 要解决这个问题,需要使用循环来实现算法。在编程时,需要注意变量的类型和作用域,避免出现变量溢出的问题。
二分查找算法 第k小数选择算法 随机第k小数选择算法 计算集合中两个元素的和和一个数相等 ##动态规划 使用分治法的最大子数组(应该算成分治法) 使用自底向上方法实现的最大子数组 使用动态规划的两种方式实现的...
本书《Grokking Algorithms》是Aditya Bhargava所著的一本关于算法入门的图书,它采用直观且易于理解的方式向读者讲解了多种常见算法的应用和实现。这本书对于初学者十分友好,通过Python语言来演示算法的实现,并...
2. 排序和查找也是常见算法,如快速排序、冒泡排序和二分查找等。 八、面向对象编程 虽然初赛可能不涉及复杂的面向对象编程概念,但作为C++的一部分,理解类、对象、继承、封装和多态等概念对于深入学习C++非常重要...