常规二分查找中遇到的问题

news2024/11/16 8:47:33

以前我们写二分查找的时候,是这么写的:

public static int binarySearch2(int []a,int target){
        int i=0,j=a.length-1;
        while(i<=j){
            int mid=(i+j)/2;
            if(a[mid]==target){
                return mid;
            }else if(a[mid]<target){
                i=mid+1;
            }else {
                j=mid-1;
            }
        }
        return -1;
    }

这么写,其实存在错误:

int mid=(i+j)/2;在i,j都比较小的时候没有问题,但是,一旦j值很大很大,逼近int型的边界限定的时候,如果a[mid]<target,i=mid+1,j不变,那么此时此刻i值变为int型边界限定的一半,那么i+j的和就超过了int型的边界限定了,那么(i+j)/2中先进行的i+j运算就会出错,那么得到的新mid值就有错。

正确写法:

public static int binarySearch2(int []a,int target){
        int i=0,j=a.length-1;
        while(i<=j){
            int mid=(i+j)>>>1;
            if(a[mid]==target){
                return mid;
            }else if(a[mid]<target){
                i=mid+1;
            }else {
                j=mid-1;
            }
        }
        return -1;
    }

可以看到,int mid=(i+j)/2;变成了int mid=(i+j)>>>1;

解释一下:

右移运算符>>>,运算结果正好能对应一个整数的二分之一值,这就正好能代替数学上的除2运算,但是比除2运算要快。
mid=(left+right)>>1相当于mid=(left+right)/2

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

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

相关文章

Conda python管理环境environments 一 从入门到精通

Conda系列&#xff1a; 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装Conda python运行的包和环境管理 入门 使用 conda&#xff0c;可以创建、导出、列出、删除和更新 具有不同 Python 版本和/或 安装在其中的软件包。在两者之间切换或移动 环境称为激活环境。您…

如何在CentOS8使用宝塔面板本地部署Typecho个人网站并实现公网访问【内网穿透】

文章目录 前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 Typecho是由type和echo两个词合成的&#xff0c;来自于开发团队的头脑风暴。Typecho基于PHP5开发&#xff0c;支持多种数据库&#…

Java 面向对象案例01(黑马)

文字版格斗游戏 在Javabean类中定义方法的形参的数据类型可以是什么&#xff1f; 在JavaBean类中&#xff0c;方法的形参的数据类型可以是任何合法的Java数据类型&#xff0c;包括基本数据类型&#xff08;如int、char、boolean等&#xff09;、引用数据类型&#xff08;如Str…

【文件处理】spring boot 文件处理

接收文件 PostMappingpublic result<String> add(MultipartFile file) throws IOException {// 得到目标文件夹File directory new File("file");//如果文件夹不存在就创建if(!directory.exists()){directory.mkdirs();}//文件名称String fileName file.getO…

分子生成工具应用案例+流程 - Pocket Crafter

2023年10月9日&#xff0c;诺华公司的Lingling Shen和He Wang在Chemrxiv上发表了文章《Pocket Crafter: A 3D Generative Modeling Based Workflow for the Rapid Generation of Hit Molecules in Drug Discovery》&#xff0c;介绍了他们分子生成在hit finding项目应用中的pip…

python+appium自动化测试-Appium并发测试之python启动appium服务

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

【加速计算】从硬件、软件到网络互联,AI时代下的加速计算技术

AI、元宇宙、大模型…每一个火爆名词的背后都代表着巨大的算力需求。据了解,AI模型所需的算力每100天就要翻一倍,远超摩尔定律的18-24个月。5年后,AI所需的算力规模将是今天的100万倍以上。 在这种背景下,加速计算提供了必要的计算能力和内存,其解决方案涉及硬件、软件和…

ChatGPT:关于 OpenAI 的 GPT-4工具,你需要知道的一切

ChatGPT&#xff1a;关于 OpenAI 的 GPT-4工具&#xff0c;你需要知道的一切 什么是GPT-3、GPT-4 和 ChatGPT&#xff1f;ChatGPT 可以做什么&#xff1f;ChatGPT-4 可以做什么&#xff1f;ChatGPT 的费用是多少&#xff1f;GPT-4 与 GPT-3.5 有何不同&#xff1f;ChatGPT 如何…

红黑树(超详解)

文章目录 前言红黑树的概念红黑树的实现红黑树的结构 insert 前言 上一篇文章我们讲了AVL树,但是AVL树只是一个过渡,我们实际当中用的更多另外一颗树还是红黑树. 也不能说红黑树就是AVL树的改进,它是用另外一种方式来控制. 这棵树更抽象一些,下一步我们来看一下. 红黑树的概…

气膜建筑助力体育场馆智能化升级

随着科技的不断进步和人们对健康生活的日益重视&#xff0c;体育馆作为体育活动的主要场所也面临着智能化升级的时刻。在这个背景下&#xff0c;气膜建筑以其轻巧、灵活的特性正成为推动体育馆智能化升级的创新力量。 气膜建筑的独特优势 气膜建筑采用特殊的薄膜材料&#xff…

每日一题——LeetCode1299.将每个元素替换为右侧最大元素

方法一 个人方法&#xff1a; 题目意思就是求在i1;i的循环条件下&#xff0c;arr[i]-arr[arr.length-1]的最大值分别为多少&#xff0c;最后一项默认为-1 用slice方法可以每次把数组第一位去除&#xff0c;得到求最大值的目标数组 Math的max方法可以直接返回数组里的最大值 …

archlinux安装软件

用 pacman 安装 sudo pacman -S XXXX xxx 中填写要安装的软件就可以了 搜索的命令是 pacman -Ss 搜索的话不需要管理员权限 查看已经安装的程序 pacman -Q 可以通过 | 将前面的信息传给后面&#xff0c;相当于传参 pacman -Q | grep XXXX 删除软件 sudo pacman -Rs…

Python中的函数(二)

1 闭包与装饰器 1.1 闭包 闭包&#xff08;Closure&#xff09;是指在一个函数内部定义的函数&#xff0c;并且该内部函数可以访问外部函数作用域中的变量。闭包可以在外部函数执行完毕后&#xff0c;仍然保持对外部函数作用域的引用&#xff0c;从而可以继续访问和操作外部函…

银河麒麟桌面桌面操作系统v10保姆级安装

目录 一、下载ISO映像文件 1.产品试用申请 2.试用版下载 二、虚拟机搭建 1.新建虚拟机 2. 选择虚拟机硬件兼容性 3.选择安装客户机操作系统 4.选择客户机操作系统 5.命名虚拟机 6.处理器配置 7.虚拟机内存 8.网络类型 9.硬件 10.指定磁盘容量 三、修改虚拟…

「优选算法刷题」:在排序数组中查找元素的第一个和最后个位置

一、题目 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target&#xff0c;返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&a…

【Linux】解决普通用户无法进行sudo提权

当某个普通用户进行sudo指令提权的时候&#xff0c;可能存在无法操作的问题&#xff0c;如下图&#xff1a; 这个图中有一个细节&#xff0c;我们使用sudo进行提权的时候&#xff0c;用的可是zhangsan的密码&#xff0c;因此有人可能会有疑问&#xff0c;这不是有问题吗&#x…

在CentOS 7中配置 RAID服务

实验过程 Xnode1克隆虚拟机raid ps&#xff1a; 阿里云盘Xnode1获取 xnode1 https://www.alipan.com/s/HgLXfoeBWG2 提取码: eb70 编辑虚拟机 添加2硬盘 CRT连接&#xff08;root密码&#xff1a;000000&#xff09; 创建raid 0 [rootdemo ~]# lsblk 安装mdadm [rootdemo…

数据结构之栈的基本操作

该顺序栈涉及到了存储整型数据的顺序栈还有存储字符型数据的顺序栈 实现的功能有&#xff1a;入栈、出栈、判断是否为空栈、求栈的长度、清空栈、销毁栈、得到栈顶元素 此外根据上述功能&#xff0c;编写了数值转换&#xff08;十进制转化八进制&#xff09;方法、括号匹配方法…

无人机航迹规划(四):七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划(提供MATLAB代码)

一、七种算法&#xff08;DBO、LO、SWO、COA、LSO、KOA、GRO&#xff09;简介 1、蜣螂优化算法DBO 蜣螂优化算法&#xff08;Dung beetle optimizer&#xff0c;DBO&#xff09;由Jiankai Xue和Bo Shen于2022年提出&#xff0c;该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖…