public class BinarySearch {
public static void main(String[] args) {
int arr1[] = {1,5,8,9,14,25,25,25,135};
System.out.println(BinarySearch.search1(arr1,0,arr1.length,25));
}
public static List<Integer> search1(int arr[],int left,int right,int findVal){
if (left>right){
return new ArrayList<Integer>();
}
int mid = (left+right)/2;
int midVal = arr[mid];
if (findVal > midVal){ //向右递归
return search1(arr,(mid+1),right,findVal);
}else if (findVal<midVal){ //向左递归
return search1(arr,left,(mid-1),findVal);
}else {
/*
找到mid的索引值时,不立即返回,继续查找到所有的相同元素下标值
放到list集合中
*/
List<Integer> list=new ArrayList<Integer>();
list.add(mid); //保存找到的mid索引
//向mid索引的左边扫描
int temp = mid-1;
while (true){
if (temp<0||arr[temp] != findVal){
// 判断索引是否小于零 或者 值不等于findVal时
// 就退出
break;
}
list.add(temp);
temp-=1;
}
// 向mid索引的右边扫描
temp=mid+1;
while (true){
if (temp>arr.length-1||arr[temp]!=findVal){
// 判断索引是否大于零 或者 值不等于findVal时
// 就退出
break;
}
list.add(temp);
temp+=1;
}
return list;
}
}
}