0
点赞
收藏
分享

微信扫一扫

算法:二分查找

程序员伟杰 2022-02-21 阅读 60

1、条件

  • 查找的数量只能是一个,不能是多个;

  • 用于查找的内容逻辑上是有序无重复的;

2、分类

3、思想

  1. 判断左右值和target大小规定左右索引范围;
  2. 循环条件一定要和区间分类一致,两种区间循环条件也不一致;
  3. 左闭右闭循环不加等号会出现找不到target;左闭右开循环加等号,当值在数组里没有时,跳不出循环并输出-1

4、代码

  • 左闭右闭
int search(vector<int>& nums; int target)
{
    int left = 0;
    int right = nums.size() - 1;
    while (left <= right)
    {
        int middle = (left + right)/2;
        if (nums[middle] < target)
        {
            left = middle + 1;
        }
        else if(nums[middle] > target)
        {
            right = middle - 1;
        }
        else
        {
            return middle;
        }
    }
    return -1;
    
}
  • 左闭右开
int search(vector<int>& nums; int target)
{
    int left = 0;
    int right = nums.size() - 1;
    while (left < right)
    {
        int middle = (left + right)/2;
        if (nums[middle] < target)
        {
            left = middle + 1;
        }
        else if(nums[middle] > target)
        {
            right = middle;
        }
        else
        {
            return middle;
        }
    }
    return -1;
    
}
举报

相关推荐

0 条评论