二分查找
相似题型(瞎编)
题目描述
给你一个有序的数列(A,长度为n),再给你一个数(x),输出这个数的位置(不重复出现此数)。
样例输入
7
1 3 4 5 7 8 10
7
样例输出
5
思路
类似这样的题型,我们第一个想到的,是枚举,将1~n扫一遍。这种方法,时间复杂度为O(n),题目数据大时会炸掉(并非指此题,此题也许只是一个大题中的一小部分嵌入这个算法。此题数据大时连输入也超时,别跟我提读入优化,我连这东西能不能吃都不知道)
内容
二分查找是分治算法的一种(我其实并不熟练)。主要思想是,将一个区间分成两段,把其中一段排除,取更优的一段。将这一段再进行同样的操作,直到此区间变为一点。
首先指定一个区间(l~r),这区间是要有序(我们这里先假设从小到大)的。你要查找一个数,就从中间分,mid=(l+r)/2。如果A[mid]正好就是你要查找的数,则mid就是它的位置。当A[mid]>x时,说明x的位置在mid左侧,我们就不用找右侧了