二分查找

二分查找-I

https://www.nowcoder.com/practice/d3df40bd23594118b57554129cadf47b?tpId=196&tqId=38364&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26pageSize%3D50%26search%3D%25E4%25BA%258C%25E5%2588%2586%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=undefined&tags=&title=%E4%BA%8C%E5%88%86

使用范围

一个排好序的数组中

用途

用于在有序数组中查找目标元素

优点

减少一次遍历带来的不必要的次数,使得每一查找都能在 更小的区间进行

思想

定义两个指针,一个左指针left,一个右指针right,左指针指向数组的头部,右指针指向数组的尾部,然后还有一个中间指针,初始化为左右指针的平均(mid=(right+(left-right)/2)。
然后进行循环,只有左指针小于右指。中间指针更新为左右指针的平均。循环过程中遇到中间指针的值等于目标值,就返回中间值,如果中间值大于目标值,就更新right=mid-1,如果小于目标值left=mid+1.

  int left=0;
        int right=nums.length-1;
        int mid=left+(right-left)/2;
        while(left<=right)
        {
            mid=left+(right-left)/2;
            if(nums[mid]==target){
                return mid;


            }else if(nums[mid]<target){
                left=mid+1;

            }else if(nums[mid]>target){
                right=mid-1;

            }

        }
#算法#
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务