二分查找的重点,在于区间的划分和条件的设置
public class Two_Findway {
public static void main(String[] args) {
int[] nums = {-1,0,3,5,9,12};
int target = 9;
int index = findNum2(nums,target);
System.out.println(index);
}
//写法一,左闭右闭 [1,1] left middle right
private static int findNum(int[] arrays, int target) {
// TODO Auto-generated method stub
int left = 0; //左取值
int right = arrays.length-1; //右闭
while(left<=right) { //[1,1] <=才满足条件
int middle = (left+right)/2;//注意middle的赋值要写在while循环中
if(arrays[middle]>target) {
right = middle-1; //因为右闭的原因,所以arrays[middle]!=arrays[right],所以不用取到索引为right的值
}else if(arrays[middle]<target) {
left = middle+1;
}else {
return middle;
}
}
return -1;
}
//写法二,左闭右开[1,1)
private static int findNum2(int[] arrays,int target) {
int left = 0;//左闭
int right = arrays.length;//右开
while(left<right) {
int middle = (left+right)/2;
if(arrays[middle]>target) {
right = middle;
}else if(arrays[middle]<target) {
left = middle+1;
}else {
return middle;
}
}
return -1;
}
}