算法——二分查找(leetcode704)

对于二分查找而言,首先我们得到的查找数组必须是一个有序数组,接着通过数组的两端得到左指针和右指针继而得到中间指针指向数组中间元素,将中间元素与目标值比较如果大于目标值舍弃数组中间元素右边的一半将右指针重置为中间指针下标-1中间指针重置为左右指针下标之和除以2(如果中间元素与目标值比较小于目标值则舍弃数组中间元素左边的一半将左指针重置为中间指针下标+1)然后就得到剩下左右指针所包括的待对比数组元素重复上述步骤直至找出目标值或者左指针下标大于右指针下标即未找到目标元素。

如下分别是左右指针数组边界左闭右闭和左闭右开两种情况的代码

class Solution {
    public int search(int[] nums, int target) {
        int left=0;
        int right=nums.length-1;
        int middle=(left+right)/2;
        while(left<=right){
            if(nums[middle]==target)
            return middle;
            if(nums[middle]>target){
                right=middle-1;
                middle=(left+right)/2;
            }
            if(nums[middle]<target){
                left=middle+1;
                middle=(left+right)/2;
            }
        }
return -1;
    }
}
class Solution {
    public int search(int[] nums, int target) {
        int left=0;
        int right=nums.length;
        int middle=(left+right)/2;
        while(left<right){
            if(nums[middle]==target)
            return middle;
            if(nums[middle]>target){
                right=middle;
                middle=(left+right)/2;
            }
            if(nums[middle]<target){
                left=middle+1;
                middle=(left+right)/2;
            }
        }
return -1;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值