package com.study.data.structures.search;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class BinarySearch {
public static void main(String[] args) {
int[] arr = {23, 45, 67, 86, 86, 90, 91};
int index = binarySearch(arr, 0, arr.length - 1, 86);
System.out.println("当前值::" + index);
List<Integer> integers = binarySearch2(arr, 0, arr.length - 1, 86);
System.out.println(integers);
}
public static int binarySearch(int[] arr, int left, int right, int searchNumber) {
if (left > right) {
return -1;
}
int middleIndex = (left + right) / 2;
int middleValue = arr[middleIndex];
if (middleValue > searchNumber) {
return binarySearch(arr, left, middleIndex - 1, searchNumber);
} else if (middleValue < searchNumber) {
return binarySearch(arr, middleIndex + 1, right, searchNumber);
} else {
return middleIndex;
}
}
public static List<Integer> binarySearch2(int[] arr, int left, int right, int searchNumber) {
if (left > right) {
return new ArrayList<>();
}
int middleIndex = (left + right) / 2;
int middleValue = arr[middleIndex];
if (middleValue > searchNumber) {
return binarySearch2(arr, left, middleIndex - 1, searchNumber);
} else if (middleValue < searchNumber) {
return binarySearch2(arr, middleIndex + 1, right, searchNumber);
} else {
List<Integer> resultIndex = new ArrayList<>();
int temp = middleIndex - 1;
while (true) {
if (temp < 0 || arr[temp] != searchNumber) {
break;
}
resultIndex.add(temp);
temp--;
}
resultIndex.add(middleIndex);
temp = middleIndex + 1;
while (true) {
if (temp > arr.length - 1 || arr[temp] != searchNumber) {
break;
}
resultIndex.add(temp);
temp++;
}
return resultIndex;
}
}
}