【Leetcode 中等】34. 在排序数组中查找元素的第一个和最后一个位置

原题链接

Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置


题目

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。

你必须设计并实现时间复杂度为 O(logn) 的算法解决此问题。

示例 1:

输入:nums = [5,7,7,8,8,10],targrt = 8

输出:[3,4]

示例 2:

输入:nums = [5,7,7,8,8,10],targrt = 6

输出:[-1,-1]

示例 3:

输入:nums = [],targrt = 0

输出:[-1,-1]


题目分析

思路:因为该数组是非递减顺序的,所以我们可以使用 “二分查找” 的思想来解决。通过两次二分查找,一次查找目标值的起始位置,一次查找目标值的结束位置:

  1. 查找起始位置:使用二分查找,找到数组中目标值的最左位置。如果找到目标值,继续向左查找,直到找到第一个不等于目标值的元素,这个位置的索引就是目标值的起始位置
  2. 查找结束位置:同样使用二分查找,但这次找到目标值的最右位置。如果找到目标值,继续向右查找,直到找到第一个不等于目标值的元素,这个位置的索引就是目标值的结束位置
  3. 特殊情况处理:
    ①如果数组为空,那我们就直接返回 [-1,-1]
    ②如果数组中不存在目标值,那么也应该返回 [-1,-1]

这个思路的关键在于,通过两次二分查找,我们可以高效地找到目标值的边界,而不需要遍历整个数组。这种方法的时间复杂度是 O(logn)

图解:


代码实现

class Solution {public int[] searchRange(int[] nums, int target) {int[] ret = {-1, -1};int len = nums.length;if(len == 0) {return ret;}//查找左端点int left = 0;int right = len - 1;//判断条件只能为 <while(left < right) {//防止死循环,不能在括号里+1int mid = left + (right - left) / 2;if(nums[mid] < target) {left = mid + 1;} else {right = mid;}}//此时left和right相等,判断是否为targetif(nums[left] != target) {return ret;} else {ret[0] = left;}//查找右端点left = 0;right = len - 1;//判断条件只能为 <while(left < right) {//防止死循环,必须在括号里+1int mid = left + (right - left + 1) / 2;if(nums[mid] > target) {right = mid - 1;} else {left = mid;}}if(nums[left] == target) {ret[1] = left;}return ret;}
}

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

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

相关文章

金融学期末速成笔记

【拯救者】金融学速成&#xff08;基础习题&#xff09; 重点: 市场经济是发达的商品经济。在市场经济条件下&#xff0c;市场机制作为资源配置方式&#xff0c;发挥基础性作用。 除具有商品经济的一般特征外&#xff0c;与商品经济相比&#xff0c;市场经济还具有一些新的特征…

云计算复习文档

云计算复习文档 一 云计算概述 名词&#xff1a; 云计算 1.0 &#xff1a; 面向数据中心管理员的IT基础设施资源虚拟化阶段 通过计算虚拟化技术将企业IT应用与底层的基础设施彻底分离、解耦 将多个企业IT应用实例及运行环境复用在相同的物理服务器上&#xff0c;并通过虚…

【Docker容器化技术】docker安装与配置、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库

文章目录 一、Docker的安装与配置1、docker概述2、安装docker3、docker架构4、配置镜像加速器 二、Docker命令1、服务相关命令2、镜像相关命令3、容器相关命令 三、Docker容器数据卷1、数据卷概念及作用2、配置数据卷3、配置数据卷容器 四、Docker应用部署实战1、部署MySQL2、部…

window11安装elasticsearch+Kibana

1、下载elasticsearch与elasticsearch 下载elasticsearch 查看elasticsearch对应的Kibana版本 下载elasticsearch解压后文件目录如下 可执行脚本文件,包括启动elasticsearch服务、插件管理、函数命令等 bin配置文件目录,如elasticsearch配置、角色配置、jvm配置等 conf 默认…

云技术基础学习

声明 学习内容来自 B站 up 主《泷羽 sec》&#xff0c;如涉及侵权等问题&#xff0c;请及时联系&#xff0c;本人将马上删除文章。在此郑重声明&#xff0c;文章仅限于交流学习&#xff0c;任何其他违法行为与本人及泷羽 sec 无关。请务必遵守法律法规&#xff0c;切莫越过法律…

初识Linux · 匿名管道

目录 前言&#xff1a; 匿名管道 理解为什么&#xff1f; 理解是什么&#xff1f; 理解怎么做&#xff1f; 前言&#xff1a; 引入管道之前&#xff0c;我们引入几个问题&#xff0c;进程通信的相关问题。 第一个是进程之间为什么要通信&#xff0c;对于进程间通信来说&…

MySQL数据库:本地部署数据库以及安装彩虹猫【Navicat】

文章目录 一.安装前准备工作1.下载并解压文件2.修复电脑缺失的文件 二.本地部署MySQL1.先解压mysql-8.0.25-winx64.zip&#xff0c;并把文件放到安装需要的位置&#xff0c;再把my.ini文件放到mysql-8.0.25-winx64的根目录2.修改注册表的根目录信息为自己的安装装路径3.进命令符…

计算机网络作业一

一共8次作业&#xff0c;都挺难的&#xff0c;只能在老师的要求下尽力尝试。 任务&#xff1a;探测Internet (IPv4和IPv6) 1. 探测并估计有多少地址是活动的&#xff0c;解释你的方法并估计误差范围 2. 找到尽可能多的关键地址&#xff0c;然后解释它们是什么&#xff0c;为…

联通10010 阿里滑块 231 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 有相关问题请第一时间头像私信联系我删…

DAY58||110.字符串接龙 |105.有向图的完全可达性 |106.岛屿的周长

110.字符串接龙 110. 字符串接龙 题目描述 字典 strList 中从字符串 beginStr 和 endStr 的转换序列是一个按下述规格形成的序列&#xff1a; 1. 序列中第一个字符串是 beginStr。 2. 序列中最后一个字符串是 endStr。 3. 每次转换只能改变一个字符。 4. 转换过程中的中间字符串…

爬虫补环境案例---问财网(rpc,jsdom,代理,selenium)

目录 一.环境检测 1. 什么是环境检测 2.案例讲解 二 .吐环境脚本 1. 简介 2. 基础使用方法 3.数据返回 4. 完整代理使用 5. 代理封装 6. 封装所有使用方法 jsdom补环境 1. 环境安装 2. 基本使用 3. 添加参数形式 Selenium补环境 1. 简介 2.实战案例 1. 逆向目…

《TCP/IP网络编程》学习笔记 | Chapter 8:域名及网络地址

《TCP/IP网络编程》学习笔记 | Chapter 8&#xff1a;域名及网络地址 《TCP/IP网络编程》学习笔记 | Chapter 8&#xff1a;域名及网络地址域名系统什么是域名&#xff1f;DNS 服务器IP 地址和域名之间的转换使用域名的必要性利用域名获取 IP 地址利用 IP 地址获取域名 基于 Wi…

Liunx:简易版进程池

进程向系统申请资源存在一定的效率问题。系统调用在底层是有成本的。频繁的向操作系统申请资源会造成一定的开销。解决办法是一次性向系统申请你需要的资源&#xff0c;将这些资源在用户层管理维护起来&#xff0c;减少程序频繁的陷入内核。这就是池化的意思&#xff0c;可以简…

百亿AI数字人社会初现:Project Sid展示智能代理文明进化路径

项目背景 Project Sid 是一项开创性的AI代理人文明实验,旨在通过新开发的认知架构 PIANO 探讨AI代理人是否能够在大规模数字社会中实现文明的演进。这项实验不仅展示了社会进步、角色分化、治理体系及文化传播等特征,还揭示了一个包含百亿“数字人类”的社会可能性。 PIANO…

CoCa: Contrastive Captioners are Image-Text Foundation Models

Jiahui Yu† Zirui Wang†{jiahuiyu, ziruiw}google.comVijay Vasudevan Legg Yeung Mojtaba Seyedhosseini Yonghui WuGoogle Research 参考代码链接&#xff1a;https://github.com/lucidrains/CoCa-pytorch 模型效果对比网址&#xff1a;CoCa: Contrastive Captioners are …

HarmonyOS一次开发多端部署三巨头之功能级一多开发和工程级一多开发

功能级一多开发与工程级一多开发 引言功能级一多开发SysCaps机制介绍能力集canlUse接口 工程级一多开发三层架构规范 引言 一次开发多端部署 定义&#xff1a;一套代码工程&#xff0c;一次开发上架&#xff0c;多端按需部署 目标&#xff1a;支撑开发者快速高效的开发多终端设…

c中的文件管理

大家好&#xff0c;今天我们来看看语言中的文件管理&#xff0c;聊到这个&#xff0c;我们就得先说说文件的特点。 1.文件是一种让数据持久化的方法&#xff0c;使用文件可以将数据直接存放在电脑的硬盘上&#xff0c;做到数据持久化。 那么什么是文件呢&#xff1f; 硬盘上…

ElasticSearch的Python Client测试

一、Python环境准备 1、下载Python安装包并安装 https://www.python.org/ftp/python/3.13.0/python-3.13.0-amd64.exe 2、安装 SDK 参考ES官方文档: https://www.elastic.co/guide/en/elasticsearch/client/index.html python -m pip install elasticsearch一、Client 代…

python中常见的8种数据结构之一数组的应用

在Python中&#xff0c;数组是一种常见的数据结构&#xff0c;用于存储一系列相同类型的元素。在实际应用中&#xff0c;数组可以用于解决各种问题。 以下是数组在Python中的一些常见应用&#xff1a; 1. 存储和访问数据&#xff1a;数组可以用于存储和访问一组数据。可以通过…

Android 实现柱形图

在 Android 中实现柱状图&#xff0c;可以使用流行的图表库 MPAndroidChart&#xff0c;它支持多种类型的图表&#xff0c;包括柱状图、折线图、饼图等。下面是一个基本的柱状图实现步骤&#xff0c;具体分为以下几个部分&#xff1a; 1. 添加依赖 首先&#xff0c;你需要在 …