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

LeetCode讲解篇之34. 在排序数组中查找元素的第一个和最后一个位置

文章目录

  • 题目描述
  • 题解思路
  • 题解代码
  • 题目链接

题目描述

在这里插入图片描述

题解思路

这题让我们求目标值的左边界和右边界,我们可以采用二分查找搜索有序数组内大于等于目标值的最左边的下标

然后我们只需要在有序数组查找一下大于等于target的最左边下标

  • 如果该下标越界或者下标对应的值不等于target,则说明有序数组中不存在target,直接返回没找到target的第一个位置
  • 如果找到target的第一个位置,我们查找大于等于target + 1的最左边下标,然后该下标减一就是target的最后一个位置,然后返回结果

题解代码

func searchRange(nums []int, target int) []int {
    if len(nums) == 0 {
        return []int{-1, -1}
    }
    var binarySearch func(target int) int
    binarySearch = func(target int) int {
        l, r := 0, len(nums) - 1
        for l <= r {
            m := (l + r) >> 1
            if nums[m] < target {
                l = m + 1
            } else {
                r = m - 1
            }
        }

        return l
    }

    l := binarySearch(target)
    if l == len(nums) || nums[l] != target {
        return []int{-1, -1}
    }

    return []int{l, binarySearch(target + 1) - 1}
}

题目链接

https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/description/


http://www.kler.cn/news/341506.html

相关文章:

  • zigbee学习
  • C++-容器适配器- stack、queue、priority_queue和仿函数
  • 重生之我们在ES顶端相遇第 20 章 - Mapping 参数设置大全(进阶)
  • 交叉编译(移植)
  • 深入解析MySQL事务管理:ACID特性与基本操作
  • 文件夹作为普通文件而非子模块管理
  • Unity实现自定义图集(三)
  • 【操作系统】引导(Boot)电脑的奇妙开机过程
  • LeetCode hot100---栈专题(C++语言)
  • Stable Diffusion绘画 | 如何做到不同动作表情,人物角色保持一致性(上篇)
  • sqli-labs靶场第三关less-3
  • MySQL GROUP_CONCAT函数踩坑小记
  • 领域驱动设计DDD的工作机制
  • 基于ZABBIX监控 RabbitMQ服务开箱模板汉化及适用性改造
  • 相亲交友系统的商业模式探讨
  • Android Studio Koala Feature Drop 稳定版现已推出
  • 在滴滴和字节划水6年,过于真实了。。。
  • 刷题小计六:矩阵
  • 【fastjson】json对象格式化打印
  • 2015年国赛高教杯数学建模C题月上柳梢头解题全过程文档及程序