时间复杂度
对数据大小为n的数组进行二分查找,每次需要遍历的区间为n,n/2,n/4,...,n/2^k
经过k次比较后,二分查找完成,时间复杂度为O(k)。因为n/2^k=1,k=logn,故时间复杂度O(logn)
局限性
- 依赖数组随机访问的特性
- 依赖序列的有序性
- 数据量太小,用顺序查找就足够了,没必要二分
- 数据量太大,用大的数组需要申请大的连续内存空间,对内存要求比较苛刻
例题整理
搜索旋转数组
https://leetcode.cn/problems/search-in-rotated-sorted-array/
思路1判断mid落在左区间还是右区间,再判断target落在左区间还是右区间,分情况讨论
思路2即官方题解,判断哪边区间有序,只有在有序区间才能判断target是否落在其中
搜索旋转数组II
https://leetcode.cn/problems/search-in-rotated-sorted-array-ii/
因为整个区间并不单调递增,所以没法判断mid落在左区间还是右区间,只能走思路2