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

二分查找的几种寻找情况

二分查找的几种寻找情况

查找第一个位置

func findFirst(nums []int, target int) int {
    l, r := 0, len(nums)-1
    ans := -1
    for l <= r {
        mid := l + (r-l)/2
        if nums[mid] == target {
            ans = mid        // 记录位置
            r = mid - 1      // 继续向左搜索
        } else if nums[mid] < target {
            l = mid + 1
        } else {
            r = mid - 1
        }
    }
    return ans
}

查找最后一个位置

func findLast(nums []int, target int) int {
    l, r := 0, len(nums)-1
    ans := -1
    for l <= r {
        mid := l + (r-l)/2
        if nums[mid] == target {
            ans = mid        // 记录位置
            l = mid + 1      // 继续向右搜索
        } else if nums[mid] < target {
            l = mid + 1
        } else {
            r = mid - 1
        }
    }
    return ans
}

找第一个大于 target 的元素

func findFirstGreater(nums []int, target int) int {
    l, r := 0, len(nums)-1
    ans := -1
    for l <= r {
        mid := l + (r-l)/2
        if nums[mid] > target {
            ans = mid        // 记录候选答案
            r = mid - 1      // 继续向左搜索
        } else {
            l = mid + 1      // 继续向右搜索
        }
    }
    return ans
}

找第一个小于 target 的元素

func findFirstSmaller(nums []int, target int) int {
    l, r := 0, len(nums)-1
    ans := -1
    for l <= r {
        mid := l + (r-l)/2
        if nums[mid] < target {
            ans = mid        // 记录候选答案
            l = mid + 1      // 继续向右搜索
        } else {
            r = mid - 1      // 继续向左搜索
        }
    }
    return ans
}

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

相关文章:

  • idea添加版权信息
  • PML和金属边界区别
  • Unity图形学之Surface Shader结构
  • 神经网络中常用的激活函数(公式 + 函数图像)
  • 【vue3+Typescript】unapp+stompsj模式下替代plus-websocket的封装模块
  • 双因子认证:统一运维平台安全管理策略
  • 逻辑像素与物理像素——canvas缩放后绘图区域的长宽究竟是多少
  • draggable的el-dialog实现对话框标题可以选择
  • 一篇保姆式centos/ubuntu安装docker
  • 内网渗透横向移动1
  • 鸿蒙开发——根据背景图片来构建特定颜色的蒙版
  • mac安装appuim
  • PD虚拟机启动后 Mac主机无法上网解决教程
  • 树莓派——Opencv_python基本操作
  • 【接口封装】——5、绘制头像
  • c++的类和对象(1)
  • PDF内容提取,MinerU使用
  • vscode + ROS 配置快捷编译
  • 【C++】从C语言到C++学习指南
  • GESP语法知识(快速排序)
  • VRRP虚拟路由实现主备设备负载分担
  • 在Spring Boot项目中集成RabbitMQ消息中间件
  • JSON 性能测试 - WastJson 性能也很快
  • 基于LiteFlow的风控系统指标版本控制
  • ApiChain 从迭代测试用例到项目回归测试 核心使用教程
  • 知乎日报——第二周