【牛客BAT算法】5.二分搜索

目录二分搜索常见的应用场景二分搜索常见题目的变化案例一:给定无序数组arr,已知任意相邻的两个元素,值都不重复,请返回一个局部最小的位置。案例二:出现的最左的位置案例三:有序循环数组寻找最小值案例四:给定一个有序整型数组arr,其中不含有重复元素,请找到满足arr[i]=i条件的最左的位置。如果所有位置上的树都不满足条件,返回-1。案例五:给定一棵完全二叉树的头结点head,返回这棵树的节点个数。如果完全二叉树的节点数为N,实现时间复杂度低于O(N)的算法。案例六:整数K的N
摘要由CSDN通过智能技术生成

目录

二分搜索常见的应用场景

二分搜索常见题目的变化

案例一:给定无序数组arr,已知任意相邻的两个元素,值都不重复,请返回一个局部最小的位置。

案例二:出现的最左的位置

案例三:有序循环数组寻找最小值

案例四:给定一个有序整型数组arr,其中不含有重复元素,请找到满足arr[i]=i条件的最左的位置。如果所有位置上的树都不满足条件,返回-1。

案例五:给定一棵完全二叉树的头结点head,返回这棵树的节点个数。如果完全二叉树的节点数为N,实现时间复杂度低于O(N)的算法。

案例六:整数K的N次方


二分搜索常见的应用场景

1.在有序序列中查找一个数,时间复杂度为O(logN)
2.并不一定非要在有序序列中才能应用。
(在任意序列中,每次能够淘汰掉一半,只剩下另一半,这种情况都可以用二分搜索处理)
 

二分搜索常见题目的变化

1.给定处理或者查找对象的不同(有重复值和无重复值)
2.判断条件不同(=,>=)
3.返回的内容不同(任意一个满足条件的元素的位置,最左位置,最右位置,元素的个数)
 
在有序循环数组中进行二分搜索
 
重要提醒:
mid=(low+high)/2,当low,high数值很大的时候,可能会发生溢出
更安全的写法:mid=low+(high-low)/2
 

案例一:给定无序数组arr,已知任意相邻的两个元素,值都不重复,请返回一个局部最小的位置。

局部最小的概念:
1.对于0位置的元素,如果arr[0]<arr[1],位置0为局部最小的位置
2.对于N-1位置的元素,如果arr[N-1]<arr[N-2],位置N-1为局部最小的位置
3.对于非0,N-1位置的元素,如果arr[i]小于左右两侧的元素(arr[i-1],arr[i+1]),位置i为局部最小的元素
 
答案:
最优解的时间复杂度为O(logN),
1.arr为空或者长度为0,表示局部最小位置不存在
2.arr长度为1,返回0,表示0为局部最小的位置
3.arr长度大于1
考察arr[0]和arr[N-1]位置是否满足,
a.满足直接返回对应位置
b.不满足,说明arr[0]>arr[1],从位置0到1,趋势是递减的,arr[N-1]>arr[N-2],从位置N-1到N-2,趋势是递减的
再考察arr[mid]位置的元素是否满足。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值