俩分法的时间复杂度
效率很高,时间复杂度是O(logN)。但是条件也比较苛刻
- 必须是有序数组的,支持通过下表随机访问。如果用链表会退化成时间复杂度O(n)
- 数组必须有序,所以在查找前需要对数组进行排序,
- 数量太小不适合二分查找法。因为在数据量小的时候LogN不见得比遍历数组要快
- 数量太大不适合二分查找法,因为数组要申请一片连续空间的内存如果太大,可能内存会不够用。
二分查找法的俩种实现方式
递归
1 | public int search(int[] a, int dest) { |
循环
1 | public int search(int[] a, int dest) { |
例子:算一个数的平方跟
这到例子主要是讲解,二分法的解决思路,先确认查找范围x比1大1–x,如果x在0和1之间0–1,然后用二分法求解mid最接近结果。
1 | public double squart(double x, int n) { |
二分法变形查找
1 |
|
课后作业-leetcode33
1 | public static void main(String[] args) { |