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

二分查找------查找区间

1. 题目

在这里插入图片描述

2. 思路和题解

这道题虽然是道中等题,并且看起来很复杂,但是实际上就是给定一个数组和目标值,让我们去寻找该目标值在数组中的位置。题目还提到说设计O(log n)的算法解决问题,更进一步暗示我们去用二分查找。要找开始位置和结束位置,那就分两步:

  1. 寻找开始位置
while (left <= right) {
    int mid = left + (right - left) / 2;
    if (nums[mid] == target) {
        arr[0] = mid; //找到目标值后,将下标赋值给数组第一个元素
        right = mid - 1; // 这一步很重要,是为了寻找在这之前,是否还存在目标值
    } else if (nums[mid] < target){
        left = mid + 1;
    } else {
        right = mid - 1;
    }
}
  1. 寻找结束位置
while (left <= right) {
    int mid = left + (right - left) / 2;
    if (nums[mid] == target) {
        arr[1] = mid;
        left = mid + 1; //这一步和上面一样也很重要,是为了确定在这之后,是否还存在目标值
    } else if (nums[mid] < target){
        left = mid + 1;
    } else {
        right = mid - 1;
    }
}

所以整体代码如下

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        int[] arr = {-1, -1};
        //第一次查找
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] == target) {
                arr[0] = mid;
                right = mid - 1;
            } else if (nums[mid] < target){
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        //第二次查找
        left = 0;
        right = nums.length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] == target) {
                arr[1] = mid;
                left = mid + 1;
            } else if (nums[mid] < target){
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return arr;
    }
}

相关文章:

  • 进程间通信 ─── linux第22课
  • STM32 的tf卡驱动
  • DAY37 动态归化Ⅰ基础题目
  • 深入LangChain:LLM交互机制与RAG集成的技术
  • 三主热备架构
  • 原生微信小程序基础语法--快速总结
  • 架构师面试(二十):CAP 定理
  • 自定义mavlink 生成wireshark wlua插件错误(已解决)
  • 【拒绝算法PUA】LeetCode 2116. 判断一个括号字符串是否有效
  • VLM理解(一)——视觉文本信息的标注与数据集制作过程
  • 第十一章 | 智能合约主网部署与验证详解
  • 6、linux c 线程 -下
  • 同旺科技USB to I2C 适配器 ---- 多从机设备混合调试
  • 关于解决Ubuntu终端及系统字体大小的问题
  • Java 24 学习
  • WebSocket:现代实时通信协议的深度解析与实践
  • Mysql笔记
  • el-table单元格编辑,动态增删行,回车/上下左右箭头切换单元格
  • cpp-友元
  • 马科维茨均值—方差理论推导过程
  • 习近平:在庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会上的讲话
  • 商务部:入境消费增长潜力巨大,离境退税有助降低境外旅客购物成本
  • 我国对国家发展规划专门立法
  • 人民日报:光荣属于每一个挺膺担当的奋斗者
  • 江苏、安徽跨省联动共治“样板间”:进一扇门可办两省事
  • 证券时报:落实“非禁即入” ,让创新活力充分涌流