我遇到了这个问题: 给定未排序的数组,使用二进制搜索查找可以找到多少个元素 -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);
}
答案 0 :(得分:1)
二进制搜索不适用于未排序的数组。也就是说,如果您忽略了数组未排序的事实,并在数组上运行了二进制搜索算法,则对于某些输入,它可能会成功找到所需元素的索引。
例如,二进制搜索算法的第一步要求您检查元素是否为数组的中间索引。因此,如果您要搜索恰好在该位置的元素,则无论数组是否已排序,二进制搜索都会找到它。
因此
使用二进制搜索查找可以找到多少个元素
要求您回答给定的数组,可以通过二进制搜索算法找到多少个元素。