准备面试需要知道的经典算法--二分查找

二分查找

二分查找也称折半查找,是一种在有序数组中查找某一特定元素的搜索算法。从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜 素过程结束; 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组 为空,则代 表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。折半搜索每次把搜索区域减少一半,时间复杂度为Ο(logn)。

PHP代码实现:

function bin_search($arr, $low, $high, $key){
	if ($low <= $high) {
		$mid = intval(($low + $high) / 2);
		if ($arr[mid] == $key){
			return mid;
		}
		else if ($arr[mid] > $key){
			return bin_search($arr, $low, $mid-1, $key);
		}
		else {
			return bin_search($arr, $mid+1, $high, $key);
		}
	}

	return -1;
}


运用:

实现一个函数,完成开根号的操作,不能调用系统库函数, 诸如Math.sqrt(v) 之类的,举例,:sqrt(9, 0.21)返回值属于 [2.79, 3.21] 这个区间的任意一个都满足条件。

最容易想的方法是暴力搜索,用一个循环,每次r += t(t为允许误差),直到r的平方大于等于v。

这个方法理论上是一个可行的方法,不过当要求误差很小且v值很大的时候会效率很低。可以想一些优化的方法,例如,不断修改步长来增大接近真实值的速度。

可以借用二分查找的思想来解此题,不过需要注意结束条件。
r减v的开根小于t )和 (r的平方减v小于t)是不一样的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前Facebook工程师 打造王者级课程                            覃超 Facebook 早期员工&多年面试官、曾作为 Facebook Messenger Tech Lead,主导和参与了 Facebook App、Facebook Messenger、Facebook Phone 等产品的研发工作。 现在,覃超老师致力于计算机科学领域的培训指导,经他指导的学生,90%以上拿到了硅谷公司或国内顶级互联网公司的offer。 推动0到3岁程序员 打通职业发展路径 数据结构与算法计算机学科知识结构的核心和技术体系的基石,随着科技的飞速发展,数据结构的基础性地位反而更加坚固,是每一个程序员必须掌握的底层核心技能! 多岗位必备技能 快速提升编程内功   作为一名程序员,无论是任何岗位,掌握数据结构与算法,就可以在面试前建立自己的算法技术体系,同时有助于更好地阅读源码和设计编写一些复杂的工具,快速提升编程内功! 建立框架性知识体系 覆盖重要知识点 很多人认为可能除了面试,之后再也用不到据结构与算法了,但是如果程序员想拔高一个层次,数据结构与算法是很重要的一部分,《全解数据结构与算法》帮你完成角色的转变! 透彻讲解底层核心原理 拓展能力上限 很多人认为可能除了面试,之后再也用不到据结构与算法了,但是如果程序员想拔高一个层次,数据结构与算法是很重要的一部分,《全解数据结构与算法》帮你完成角色的转变!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值