Swift
编程
Swift51.com
首页
社区
▼
资讯
问答
分享
建议
开源代码
Xcode下载
Swift教程
hot
登录
注册
当前位置:
首页
> 分享
欢迎加入QQ讨论群258996829
苹果6袋
6
麦子学院
Php二分法详解
发布时间:2016-12-21 15:38 回复:0 查看:2364 最后回复:2016-12-21 15:38
在
php开发
中,二分法应该算是算法里最基本的一种方法了,常用于在一个有序数组中查找某个值第一次出现的位置、最后出现的位置、或者是一段区间。
有序数组中如果用暴力的贪心算法,即遍历,时间复杂度是O(n)。
用二分法后,由于每次可以去掉一半无用的区间,会将时间复杂度减少到O(logn)。
二分法的基本做法是:
1、确定要查找的区间。
2、确定要二分时的参照点。
2、区间内选取二分点。
3、根据二分点的值,综合左右区间情况以及求解的目的,舍去一半无用的区间。
4、在有用的区间继续进行二分搜索。
下面是几道比较经典的题目:
1、给定一个升序数组以及一个目标整数target,返回target首次出现的下标位置,如果不存在返回-1。
此题目已给定升序数组,所以待求区间确定,第一步就可省略了。
2、同样是上面的题目,条件变换一下,即给定的数组可以想想为无穷大,但是你可以通过get_value($key)来获取某个下标下的值,求target第一次出现的位置。
此时相当于给定的区间不确定了,所以你先要锁定一个求解区间,增加代码如下:
3、假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7可能变成是4 5 6 7 0 1 2)。你需要找到其中最小的元素。你可以假设数组中不存在重复的元素。
如上图旋转排序数组有以下两种情况,两种情况下最小元素都是小于数组中最后一个元素的,所以可以把数组最后一个元素的值当做参考点。
来源:公众账号
取消引用
您还未登录,
请先登录
提 问
热门帖子
iDev 全平台开发者大会门票免费送!限量10张!
苹果Mac Pro垃圾桶 最低配的ME253CH
本人想买个苹果电脑搞开发,哪位大侠指点下
求助:failable initializer 'init(name:)' cannot override a non-failable initializer
为庆祝Swift发布1个月,雨燕社区正式上线。
在UITextFeild里输入数据,这个数据怎么做加减乘除?
Swift 高仿喜马拉雅FM
要成为自由职业者?先要学会苹果的Swift哦
关于嵌入式引用\()
用swift实现的调用系统相机,相册的DEMO
Swift 教程
最新帖子
swift_5.3可以更新了
swift如何实现左滑删除
IBM Swift Sandbox访问
Thread 18: Fatal error: 'try!' expression unexpectedly raised an error: Error
跟随手势滑动的ScrollableTextField
Swift5.0什么时候出
什么时候出5.0
PerfectTemplate 无法编译
WWDC19 苹果宣布全新 UI 框架 SwiftUI
水平滚动视图Carousel
Xcode 9.4下载