目录
概念二分查找(Binary Search)是一种效率较高的查找方式,它的时间复杂度为O(logn)。
内置函数,index索引位置(这个是线性查找,但是在数据少时还是很有用的)
概念
二分查找(Binary Search)是一种效率较高的查找方式,它的时间复杂度为O(logn)。
二分查找要求数组按关键字有序排列,并设置两个指针left和right分别指向数组的开头和末尾,每次查找left和right的中间项[mid]。
设数组非递减排列:
若目标值target等于中间项[mid],则找到元素;
若目标值target小于中间项[mid],则前往当前范围的左半部分查找,将right置为mid-1;
若目标值target大于中间项[mid],则前往当前范围的右半部分查找,将left置为mid+1;
若指针left跑到了right的右边,代表数组已查询完毕,且数组中没有目标值。由此可得循环的结束条件为left>right。
原文链接:https://blog.csdn.net/Wang_Xin_Ling/article/details/121336814
例题一:
方法一
力扣上简单的应用 (我的想法和概念一样)
链接在这 力扣(有兴趣的兄弟点进去看看)
方法二:
内置函数,index索引位置(这个是线性查找,但是在数据少时还是很有用的)
class Solution:
def search(self, nums: List[int], target: int) -> int:
if target in nums:
return nums.index(target)
return -1
例子2:
链接: 力扣
我的思路:考虑到它是升序排列先拿 1.最小的数和最大的数加起来,看看与目标数差距
2.若加起来的数大于目标数,则最小数加第二大的数
3.若加起来的数小于目标数,这最大数加第二小的数
4.一直到p = q 循环结束
5.返回索引(因为索引从0开始)所有p+1 , q + 1