简述二分搜索最小位置(Java实现) ?
参考答案:
二分搜索(也称为二分查找)是一种在有序数组中查找特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。
对于二分搜索最小位置,我们假设数组中的元素是递增排序的,我们要找的是第一个等于给定目标值的元素的位置。如果数组中不存在该元素,则返回-1。
以下是使用Java实现二分搜索最小位置的示例代码:
public class BinarySearch {
public static int binarySearchMinPos(int[] arr, int target) {
if (arr == null || arr.length == 0) {
return -1;
}
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
// 找到目标值,但是我们需要找到最小的位置,所以我们需要继续向左搜索
while (mid > 0 && arr[mid - 1] == target) {
mid--;
}
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
// 没有找到目标值
return -1;
}
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 4, 4, 5, 6};
int target = 4;
int minPos = binarySearchMinPos(arr, target);
System.out.println("The minimum position of " + target + " is: " + minPos);
}
}
这段代码首先检查数组是否为空或长度为0,如果是,则返回-1。然后,它初始化两个指针,一个指向数组的开头(left),另一个指向数组的末尾(right)。然后,它进入一个while循环,在这个循环中,它计算中间元素的索引(mid),并检查该元素是否等于目标值。如果等于,那么它继续向左搜索,直到找到第一个等于目标值的元素,然后返回该元素的索引。如果中间元素小于目标值,那么它将left指针移动到mid的右边。如果中间元素大于目标值,那么它将right指针移动到mid的左边。如果在数组中找不到目标值,那么while循环将结束,函数将返回-1。