先理清思路:如果查询的值,有多个相同的时候,首先用二分法查出其中的一个,并将此值的索引值赋给一个临时变量(temp),然后在将查出来的数的索引值加一,继续向右查询下一个值的索引值,如果索引值存在的话,则再将查询出来的值,赋给temp,一直循环,直至最后,将temp输出;如果索引值不存在的话,则将上一个的temp输出。
下面看代码:
public class BinarySearch{
public static void main(String args[]){
binary();
}
public static int binary(int target){
int array[]={3,5,6,8,12,19,26,35,35,35,35,54,65};
int temp = -1;
int left = 0;
int right=array.length;
while(left<=right){
int mid = (left + right)/2;
if(array[mid] <= target){ //如果中间值比目标值小,说明目标值在右边,则将mid + 1 赋给left
left = mid + 1;
if(array[mid] == target){
temp = mid; //将查出来的索引值赋给temp
}
}
else{
right = mid -1; //如果中间值比目标值大,证明目标值在左边,则将其减一赋给right
}
}
System.out.println("最大下标为:" + temp);
return temp;
}
}
这样便可以查找出来了。