未排序数组中的二进制搜索

时间:2019-06-24 11:46:23

标签: java

我遇到了这个问题: 给定未排序的数组,使用二进制搜索查找可以找到多少个元素 -ex:[5,4,6,2,8]-> Ans:3->使用二进制搜索可以找到'6'和'8'和'5'

我什至无法理解对未排序数组进行二进制搜索的含义。 有人可以解释这个问题吗?

还有一个代码可以解决此问题:

private static int countPossibleMatches(int[] array, int left, int right, int min, int max) {
        if (right < left) {
            return 0;
        } else if (right == left) {
            return (array[left] >= min && array[left] <= max? 1 : 0);
        } else {
            int middle = (left + right) / 2;
            int count = (array[middle] >= min && array[middle] <= max ? 1 : 0);
            count += countPossibleMatches(array, left, middle - 1, min, Math.min(array[middle], max));
            count += countPossibleMatches(array, middle + 1, right, Math.max(array[middle], min), max);
            return count;
        }
    }

    static int countPossibleMatches(int[] array) {
        return countPossibleMatches(array, 0, array.length - 1, Integer.MIN_VALUE, Integer.MAX_VALUE);
    }

1 个答案:

答案 0 :(得分:1)

二进制搜索不适用于未排序的数组。也就是说,如果您忽略了数组未排序的事实,并在数组上运行了二进制搜索算法,则对于某些输入,它可能会成功找到所需元素的索引。

例如,二进制搜索算法的第一步要求您检查元素是否为数组的中间索引。因此,如果您要搜索恰好在该位置的元素,则无论数组是否已排序,二进制搜索都会找到它。

因此

  

使用二进制搜索查找可以找到多少个元素

要求您回答给定的数组,可以通过二进制搜索算法找到多少个元素。