704二分查找法--搜索区间

news2024/10/5 19:11:48

二分查找法–搜索区间的深入理解

二分查找法是算法学习中很基础的算法,但是其也是很重要的算法,将二分查找法搞明白对后续算法的学习有着事半功倍的作用。

本体难点:二分搜索区间的判断

搜索区间

  1. [left,right]
    3

    int search(vector<int>& nums, int target) {
        int left = 0;
        // [left, right),right指向的值包含在搜索区间内
        int right = nums.size() - 1;  
        // 判断合法区间
        // 因为搜索区间是[left, right],故 left==right 为合法搜索的合法区间
        while(left <= right){
            // 防止两个int相加发生溢出
            // int mid = left + (right - left) / 2;
            int mid = (left + right) / 2;
            if(nums[mid] > target)
            	// 搜索区间[left, right],故right在原搜索区间内。更新搜索区间时,right应该被更新,故high = mid -1
                right = mid - 1;  
            else if(nums[mid] < target) 
           		// 搜索区间[left, right],故left在原搜索区间内。更新搜索区间时,left应该被更新,故left = mid + 1
                left = mid + 1;
            else return mid;
         }
    	 return -1;
    }
    
  2. [left,right)
    请添加图片描述

    int search(vector<int>& nums, int target) {
        int left = 0;
        // [left, right),right指向的值不包含在搜素区间内
        int right = nums.size(); 
        // 判断合法区间
        // 因为搜索区间是[left, right),故 left==right 为不合法搜索的合法区间
        while(left < right){
            // 防止两个int相加发生溢出
            // int mid = left + (right - left) / 2;
            int mid = (left + right) / 2;
            if(nums[mid] > target)
            	// 搜索区间[left, right),故right不在原搜索区间内。更新搜索区间时,right“不”应该被更新,故high = mid
                right = mid;  
            else if(nums[mid] < target) 
           		// 搜索区间[left, right],故left在原搜索区间内。更新搜索区间时,left应该被更新,故left = mid + 1
                left = mid + 1;
            else return mid;
        }
        return -1;
    }
    
  3. (right, left) (left, right]

    在算法中不常用,故在此不多做赘述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/125890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

026_SS_MoFusion A Framework for Denoising-Diffusion-based Motion Synthesis

MoFusion: A Framework for Denoising-Diffusion-based Motion Synthesis 本文提出了一种利用diffusion生成人体motion的方法。这种方法可以将音频和文本作为条件。 损失函数 对于diffusion的损失中&#xff0c;加入了运动损失。 其中第一项 LdaL_{da}Lda​ 是原始的diffusio…

微信公众号如何接入ChatGPT机器人

不难&#xff0c;代码总共也就25行&#xff0c;大致逻辑如下。 总共分为是下面两步 文章目录在云服务器上部署自定义消息处理服务微信公众号配置自己的消息处理服务器在云服务器上部署自定义消息处理服务 这里需要我们自定义来处理用户发送过来的消息 首先导入werobot&#x…

Linux操作系统实验2——进程描述

实验要求&#xff1a; 1.查看task_struct的结构&#xff0c;找到其中的pid&#xff0c;state&#xff0c;prio&#xff0c;parent pid字段 2.在task_struct结构中找到vma相关字段&#xff0c;vm_start,vm_end,vm_next 3.打印指定pid的基本信息&#xff0c;包括基本信息及VMA内存…

分组卷积与dw卷积

分组卷积&#xff08;Group Convolution&#xff09; 分组卷积在ResNext中用到了 首先必须明确&#xff1a; 常规卷积&#xff08;Convolution&#xff09;的参数量是&#xff1a; K*K*C_in*n K是卷积核大小&#xff0c;C_in是input的channel数&#xff0c;n是卷积核个数(outp…

共享模型之管程(一)

1.共享带来的问题 1.1.线程安全问题 例如: 两个线程对初始值为0的静态变量一个做自增,一个做自减,各做5000次,结果是0吗? Slf4j public class TestThread {//静态共享变量static int counter 0;public static void main(String[] args) throws InterruptedException {Threa…

【Axure教程】拖动排序——扣款顺序

随着移动支付的发展&#xff0c;移动支付的途径和方式也越来越多&#xff0c;常见的有钱包余额支付、支付宝支付、微信支付、银行卡支付……随着绑定的账户越来越多&#xff0c;我们需要一个设置扣款顺序的功能页面。 所以今天作者就教大家如果做一个拖动排序的扣款顺序的原型…

机器学习的4种经典模型总结

机器学习&#xff08;Machine Learning&#xff09;是人工智能的一个分支&#xff0c;也是人工智能的一种实现方法。机器学习的核心是“使用算法解析数据&#xff0c;从中学习&#xff0c;然后对新数据做出决定或预测”&#xff0c;机器学习的概念就是通过输入海量训练数据对模…

【财务】FMS财务管理系统---质保金与预付款

在FMS财务管理系统中&#xff0c;如何对质保金和预付款进行管理&#xff0c;笔者做了详细的业务流程拆解。 上一篇主要说了财务应收管理&#xff0c;有一些朋友留言提出了很多建议&#xff0c;在这里必须谢谢。 关于应收分为ToC与ToB两部分&#xff0c;每一部分都与前端业务系…

新一代自动出价范式:在线强化学习SORL框架

丨目录&#xff1a; 摘要 动机&#xff1a;在离线不一致问题 问题建模 方法&#xff1a;SORL框架 实验结果 总结 关于我们 参考文献▐ 摘要近年来&#xff0c;自动出价已成为广告主提升投放效果的重要方式&#xff0c;在真实广告系统&#xff08;RAS&#xff09;中&#xff0c;…

C++ 数学与算法系列之高斯消元法求解线性方程组

1. 前言 什么是消元法&#xff1f; 消元法是指将多个方程式组成的方程组中的若干个变量通过有限次地变换&#xff0c;消去方程式中的变量&#xff0c;通过简化方程式&#xff0c;从而获取结果的一种解题方法。 消元法主要有代入消元法、加减消元法、整体消元法、换元消元法、…

【C/C++ SOCKET编程】实现服务器客户端的简单通信

什么是SOCKET Socket又称"套接字"&#xff0c;应用程序通常通过"套接字"向网络发出请求或者应答网络请求&#xff0c;使主机间或者一台计算机上的进程间可以通讯。 TCP/IP协议 从字面意义上讲&#xff0c;有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议…

Hive环境安装搭建

目录 Hive安装 MySQL安装 配置Hive元数据库到MySQL Hive安装 软件包 0积分免费下载&#xff1a; hive环境安装所需软件包-Hive文档类资源-CSDN下载 将软件包拖进虚拟机中 将jar包解压到目录 给目录文件夹名改为hive 配置环境变量 输入命令&#xff1a; vim /etc/profile …

数据滚动大屏:Stimulsoft Dashboards.WIN 2023.1.2

Stimulsoft Dashboards.WIN 是一组组件&#xff0c;您可以使用这些组件将分析添加到您的应用程序中。WinForms 和 WPF 的仪表板 Stimulsoft Dashboards.WIN 是一个功能齐全的工具&#xff0c;用于在仪表板上转换、分析、分组、过滤、排序和显示数据。它与 .NET Framework 4.5 及…

科创板智能家居第一股,萤石网络昨日上市

2022年12月28日&#xff0c;杭州萤石网络股份有限公司(以下简称“萤石网络”)成功登陆上海证券交易所科创板&#xff0c;证券代码为688475。值得一提的是&#xff0c;萤石网络是登陆科创板的第500家企业。 在上市仪式上&#xff0c;萤石网络董事长、总经理蒋海青表示&#xff0…

医药信息咨询公司排名TOP10是怎么进行收费的?

随着我国医药行业的飞速发展&#xff0c;市场竞争也是越发的激烈&#xff0c;作为产业链中的医药信息咨询公司作用也愈加明显&#xff0c;医药信息咨询公司以提供医药行业的战略咨询、项目尽调、产品立项评估、行业赛道/细分市场机会评估、专利服务、新产品上市服务、新药产品特…

QA | 关于高级硬件在环(HIL)想要了解的十个问题

HiL&#xff08;Hardware-in-the-Loop&#xff09;硬件在环仿真测试系统是采用实时处理器运行仿真模型来模拟受控对象&#xff08;比如&#xff1a;汽车、航空飞机等设备&#xff09;的运行状态&#xff0c;以此判断电控模块的性能。 Q1&#xff1a;什么是HIL&#xff1f; 硬…

分享20个Javascript中的数组方法,收藏

什么是数组&#xff1f;与其他编程语言中的数组一样&#xff0c;Array对象允许在一个变量名称下存储多个项的集合&#xff0c;并且具有用于执行常见数组操作的成员。 声明数组 我们可以用两种不同的方式声明数组。 使用新阵列 使用new Array&#xff0c;我们可以指定希望存在…

GitHub下载量10W,最新23版Java岗面试攻略,涵盖25个技术栈

年底失业&#xff0c;机会也不多&#xff0c;短时间内想找到合适工作是几乎不可能的。身体好点在家&#xff0c;主要建议大家就做两件事&#xff1a; 第一&#xff1a;整理工作经验&#xff0c;制定新年求职计划。等一些不错的公司放出新的hc&#xff0c;市场情况一回暖&#…

淘宝首页serverless升级后的质量保障方案

本文主要介绍了serverless 架构升级在淘宝首页的应用&#xff0c;新架构对底层所依赖的容器、环境资源等与之前相比差异较大&#xff0c;并且对应的预发、安全生产、生产等环境&#xff0c;与旧架构的完全隔离。背景阿里巴巴集团大淘宝技术全面推进云原生2.0战役——serverless…

wordpress企业主题推荐

WordPress制造企业主题推荐 国潮好物&#xff0c;配国产主题&#xff0c;为中国制造加油、助力&#xff0c;适合生产、加工、制造业官网的WordPress主题。 演示 https://www.jianzhanpress.com/?p4358 wordpress服务行业网站模板推荐 浅绿色小清新wordpress网站模板&#x…