- 二分查找的题目,在面试中经常会被问到,但是仅仅只问二分法的话显得过于简单了
- 很多面试官都会先给你一个【无重复值的有序数组】,然后叫你你写一个二分查找算法,看看你对二分查找是否熟悉
- 如果你没有写出来,那么就叫你回家等候通知
- 如果你写出来了,然后继续问你,如果数组中有重复元素如何返回第一个和target相等的数的下标索引或最后一个和target相等的数的下标索引。并且要求你时间复杂度达到 O(logN)
- 这题其实思路很简单,要求【时间复杂度达到 O(logN)】那就说明了必须是二分查找,关键在于一些边界条件的控制和自己的想法
- 比如 力扣第34题
public static int binarySearch(int[] arr, int target) {
if (arr == null || arr.length < 1) {
return -1;
}
int l = 0;
int r = arr.length - 1;
int ans = -1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (arr[mid] == target) {
ans = mid;
r = mid - 1;
} else if (arr[mid] > target) {
r = mid - 1;
} else {
l = mid + 1;
}
}
return ans;
}
|