二分查找的实现,和易错点
2023-07-01 21:04 作者:MicroShuai | 我要投稿
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4 解释: 9 出现在 nums 中并且下标为 4
二分查找要满足两个条件:
1️⃣: 元素都是从小到大,或者从大到小排列
2️⃣:元素不重复
1️⃣写代码易错点, left<=right 是循环的结束条件,当left比right大时,说明没有找到对应的值
如果条件为left<right ,那right指针应该为arr.length 但是没有作为长度为下标的元素,这样的写法并不推荐
2️⃣mid 为什么是left+(right-left)/2?
如果当left 和 right 很大的时候,会溢出,超过int最大值,所以使用right-left 来保证不会溢出
总结: 二分查找的复杂度为O(log2n) 随这n越来越大,相比O(n) 时间复杂度会越来越小
