跳到主要内容

简述二分搜索最小位置(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。