二分查找必须是有序且无重复数组
二分查找的具体流程:
1.判断M是否为查找的target,如果是,返回下标,若不是则比较M与target的大小
2.如果target比nums[M]小,则继续在左区间查找,令R = M -1,否则在右区间查找,令L = M + 1
3.重复步骤1和2,知道找到target或L > R
需要注意的点:
1.在查找的时候,如果查找区间为左闭右闭区间,则判断条件为L <= R,因为在L = R时也有意义
2.注意M = L + (R - L)/2,如果直接令M = (L + R)/2,则当L和R较大时,有可能溢出问题
public class no2 {
public static int search(int[] nums, int target) {
int L=0;
int R=nums.length-1;
System.out.println(R);
while(L <= R) {
int M = L + (R - L)/2;
if(nums[M] == target){//查找到target
return M;
}
if(nums[M] < target){//目标在右区间查找[M + 1,R]
L = M + 1;
}
if(nums[M] > target){//目标在左区间查找[L,M - 1]
R = M - 1 ;
}
}
return -1;
}
public static void main(String[] args) {
int nums[] = {5,6};
int target = 6;
System.out.println(search(nums,target));
}
}