首页 > 编程语言 >【数据结构与算法】二分查找算法(C++实现)

【数据结构与算法】二分查找算法(C++实现)

时间:2023-01-15 13:13:18浏览次数:65  
标签:right target nums int mid C++ 算法 数据结构 left

两种写法,取决于划分规则。

这两种写法是学的yxc的,至此以后,写二分查找再也不含糊了!

yxc的分享在此:二分查找算法模板

第一种写法:

bool binarySearch(vector<int>& nums, int target) {
    int n = nums.size();
    int left = 0, right = n - 1;
    // while循环不像常见的写法,这里不能加等号,否则死循环
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] >= target) {
            // 所找的target在数组的左半段,缩小right,
            // 注意这里不能减1,因为这里的判断条件有等号
            right = mid;
        } else {
            // 所找的target在数组的右半段
            left = mid + 1;
        }
    }
    // target有可能不在数组中,这里需要检查一下
    if (nums[left] == target) return true;
    return false;
}

第二种写法:

bool binarySearch(vector<int>& nums, int target) {
    int n = nums.size();
    int left = 0, right = n - 1;
    // while循环不像常见的写法,这里不能加等号,否则死循环
    while (left < right) {
        // 注意这里的变化,有加1
        int mid = left + (right - left + 1) / 2;
        if (nums[mid] <= target) {
            // 所找的target在数组的右半段,增大left,
            // 注意这里不能加1,因为这里的判断条件有等号
            left = mid;
        } else {
            // 所找的target在数组的左半段
            right = mid - 1;
        }
    }
    // target有可能不在数组中,这里需要检查一下
    if (nums[left] == target) return true;
    return false;
}

标签:right,target,nums,int,mid,C++,算法,数据结构,left
From: https://www.cnblogs.com/bfstudy/p/17053344.html

相关文章

  • 算法--2023.1.15
    1.力扣198--打家劫舍classSolution{publicintrob(int[]nums){intn=nums.length;int[]dp=newint[n+1];dp[0]=0;......
  • 算法刷题 Day 16 | 104.二叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点
    今日内容:二叉树的最大深度559.n叉树的最大深度二叉树的最小深度完全二叉树的节点个数迭代法,大家可以直接过,二刷有精力的时候再去掌握迭代法。详细布置104......
  • (11)go-micro微服务雪花算法
    目录一雪花算法介绍二雪花算法优缺点三雪花算法实现四最后一雪花算法介绍雪花算法是推特开源的分布式ID生成算法,用于在不同的机器上生成唯一的ID的算法。该算法生......
  • C++计算矩阵对角线和的程序
    二维数组或矩阵的使用对于几个应用。矩阵行和列用于保存数字。我们可以定义2DC++中的矩阵也使用多维数组。在本文中,我们将了解如何使用C++计算给定方阵的对角线和。矩......
  • 遗传算法
    概述遗传算法是一种模拟演化的近似算法。顾名思义,它模拟大量的样本,周期性地繁衍、遗传、变异、筛选。“状态”有时在遗传算法中是对象的一个属性。思路周期......
  • 近似算法
    概述现实是复杂而困难的。很多问题是NP的。同样很多的问题我们连它们是不是NP都不知道。更多的问题我们甚至无法把它归约到某种逻辑学的形式上,更无从谈起......
  • 爬山算法
    概述爬山算法是一种基于局部择优进行转移的近似算法。具体来讲,它尝试利用深度优先搜索的反馈信息,来将搜索过程从盲目的变为启发性的,从而获得效率上的提高(和正确性上......
  • Java学习:ribbon的常用负载均衡算法分析
    1.Ribbon介绍因为微服务是目前互联网公司比较流行的架构,所以spring就提供了一个顶级框架-springcloud,来解决我们在开发微服务架构中遇到的各种各样的问题,今天的主角是sprin......
  • 【Java 数据结构及算法实战】系列 013:Java队列07——双端队列Deque
    双端队列(Deque),顾名思义是可以在队列的两端插入和移除元素的特殊队列。Java提供了java.util.Deque<E>接口以提供对双端队列的支持。该接口是JavaCollectionsFramework的一......
  • 【Java数据结构及算法实战】系列008:Java队列02——阻塞队列BlockingQueue
    阻塞队列(BlockingQueue)是一种支持额外操作的队列,这两个附加的操作是:l  在队列为空时,获取元素的线程会等待队列变为非空。l  当队列满时,存储元素的线程会等待队列可用。J......