二分查找多个数值java
时间: 2023-07-19 10:39:17 浏览: 85
java二分查找
可以使用二分查找算法,在数组中查找多个数值。具体实现步骤如下:
1. 对数组进行排序,确保数组是有序的。
2. 对于每个要查找的数值,使用二分查找算法在数组中查找该数值的位置。
3. 如果找到该数值,则记录该位置;如果未找到,则记录-1。
4. 返回所有找到的数值的位置。
以下是一个Java代码示例,实现了在一个有序数组中查找多个数值的功能:
```
public static int[] binarySearchMultiple(int[] arr, int[] targets) {
int[] result = new int[targets.length];
Arrays.fill(result, -1);
int left = 0, right = arr.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid] == targets[0]) {
result[0] = mid;
break;
} else if (arr[mid] < targets[0]) {
left = mid + 1;
} else {
right = mid - 1;
}
}
for (int i = 1; i < targets.length; i++) {
int leftIndex = left, rightIndex = right;
while (leftIndex <= rightIndex) {
int midIndex = (leftIndex + rightIndex) / 2;
if (arr[midIndex] == targets[i]) {
result[i] = midIndex;
break;
} else if (arr[midIndex] < targets[i]) {
leftIndex = midIndex + 1;
} else {
rightIndex = midIndex - 1;
}
}
}
return result;
}
```
在这个方法中,我们首先创建一个长度为目标数值数量的int数组result,用于存储每个目标数值的位置。我们使用Arrays.fill方法将数组中的所有元素初始化为-1。
然后,我们使用二分查找在数组中查找第一个目标数值的位置,并将其存储在result数组的第一个位置上。接下来,我们使用一个循环来依次查找每个目标数值的位置,如果找到则存储在result数组中,否则仍然存储-1。
最后,我们返回result数组,其中存储了所有目标数值的位置。
阅读全文