在数据范围比较大,查询次数比较多的时候,用遍历查找元素很可能会超时。这时候就可以用到二分查找,但是得注意二分查找的前提是数组内的元素必须是有序的,个别非有序数组通过处理后变为有序时也能使用二分查找。
二分查找有两种类型:整数二分,浮点二分。
整数二分:
在进行整数二分的时候经常会遇到边界问题导致程序死循环,一般推荐使用两个模板来规避边界问题。
1.查找一个元素第一次出现的位置(即查找相同元素的最小下标)
向左边查找,移动右指针r。
2.查找一个元素最后一次出现的位置(即查找相同元素的最大下标)
向右查找,移动左指针。
注意:在两个模板中if判断中都应该使用带有等号的判断符(>=或<=)。
模板题:https://www.luogu.com.cn/problem/P2249
浮点二分:
浮点二分就只用一种情况,相比整数二分而言就不需要考虑边界问题。
看题目更好理解:https://www.luogu.com.cn/problem/P1163