当前位置: 首页 > article >正文

【leetcode】704. 二分查找

注意一般mid = left + (right-left)/2;

不要用mid = (right - left)/2

中间值的计算需要考虑到整型溢出的问题。
如果使用 mid = (right - left) / 2 的方式计算中间值,那么在 right 和 left 的值接近极限值的情况下,可能会导致计算出的中间值发生整型溢出,从而得到错误的结果。

为了避免这种情况,我们一般使用 mid = left + (right - left) / 2 的方式来计算中间值。这种方式可以保证计算过程中不会出现整型溢出的问题。

具体来说,right - left要查找区间的长度,而 (right - left) / 2区间长度的一半。因此,left + (right - left) / 2 就是区间的中间位置,这样可以避免整型溢出的问题。

class Solution {
public:
    int search(vector<int>& nums, int target) {
        
        int left = 0;
        
        int right = nums.size()-1; 定义target在左闭右闭的区间里,[left, right]
        
        while(left <= right){//当left==right,区间[left, right]依然有效,所以用 <=
            
            int middle = left + ( ( right - left ) / 2 ); 防止溢出 等同于(left + right)/2
            
            if( target < nums[middle] ) {
                
                right = middle - 1;//target 在左区间,所以[left, middle - 1]
            
            }else if ( target > nums[middle] ){
                
                left = middle + 1;// target 在右区间,所以[middle + 1, right]
            
            }else{//nums[middle] == target
               
                return middle;// 数组中找到目标值,直接返回下标
            
            }
        }  
         // 未找到目标值  
        return -1;  
    }
};

整型溢出

在计算机中使用的整型数据类型(如int、long等)所能表示的范围之外进行运算时,结果会出现错误的情况。
例如,32位有符号整型的范围是 -2147483648 到 2147483647,如果进行加法运算 2147483647 + 1,由于结果超出了该数据类型的范围,会发生整型溢出,结果会变成 -2147483648。

int型是占4个字节

一个字节由8位二进制组成‌,即一个字节8位。

在这里插入图片描述


http://www.kler.cn/a/398592.html

相关文章:

  • yum工具的学习
  • uniapp自动注册机制:easycom
  • 录的视频怎么消除杂音?从录制到后期的杂音消除攻略
  • WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇
  • 023、ELK 从入门到实践
  • Go八股(Ⅵ)Goroutine 以及其中的锁和思想
  • 力扣 多数元素-169
  • 基于python Django的boss直聘数据采集与分析预测系统,爬虫可以在线采集,实时动态显示爬取数据,预测基于技能匹配的预测模型
  • css三角制作(二十课)
  • 【html网页页面002】html+css制作实现家乡江苏网页主题制作(5页面附效果图)
  • 2024-11-17 -MATLAB三维绘图简单实例
  • 发布 npm 包推送到官方库时 提示 connect ETIMEDOUT
  • 24首届数证杯(流量分析部分)
  • EM算法与高斯混合聚类:理解与实践
  • QT使用libssh2库通过密匙实现sftp协议上传文件
  • 【UE5】在材质Custom写函数的方法
  • UniAPP快速入门教程(一)
  • 目标检测评估指标详解
  • Nature Communications 基于触觉手套的深度学习驱动视触觉动态重建方案
  • 算法日记 26-27day 贪心算法
  • 基于STM32F103的秒表设计-液晶显示
  • 什么是JSX?
  • STM32设计的物联网智能鱼缸
  • 【数据结构】【线性表】【练习】删除链表倒数第n个结点
  • 面试篇-项目管理
  • 百度世界大会2024,当应用遇上AI,未来已来