思路:因为数组是有序的,当找到了想要查询的值的位置的时候,查看其左右两边的值是否和它相等,相等则把位置记录下来。
import java.util.ArrayList;
public class BinarySearch {
public static void main(String[] args) {
int[] array = {1, 8, 10, 89, 1000, 1000, 1000, 1000, 1000, 1000, 1234};
ArrayList<Integer> index = binarySearch(array, 1000);
if (index.size() > 0) {
System.out.println("index = " + index);
} else {
System.out.println("没有找到~");
}
}
public static ArrayList<Integer> binarySearch(int[] array, int value) {
int left = 0;
int right = array.length - 1;
int mid = 0;
ArrayList<Integer> list = new ArrayList<>();
while (left <= right) {
mid = left + (right - left) / 2;
int midValue = array[mid];
if (value > midValue) {
left = mid + 1;
} else if (value < midValue) {
right = mid - 1;
} else {
int temp = mid - 1;
while (temp >= 0) {
if (array[temp] != value) {
break;
}
list.add(temp--);
}
list.add(mid);
temp = mid + 1;
while (temp <= right) {
if (array[temp] != value) {
break;
}
list.add(temp++);
}
return list;
}
}
return list;
}
}