二分查找

 二分查找必须是有序且无重复数组

 二分查找的具体流程:

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));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值