news 2026/3/28 20:46:09

力扣刷题:在排序数组中查找元素的第一个和最后一个位置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
力扣刷题:在排序数组中查找元素的第一个和最后一个位置

题目:
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]。

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

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例 3:

输入:nums = [], target = 0
输出:[-1,-1]

解析:
由于题目对时间复杂度的限制,在这里使用二分查找的思路更加的方便,这里与二分查找略微不同,需要设置一个index表示向左或者向右的边界情况,index代表了左右边界的索引

具体代码:

/** * 在已排序数组中查找目标值的起始和结束位置 * @param {number[]} nums - 已排序的升序数组 * @param {number} target - 要查找的目标值 * @return {number[]} - 返回包含起始和结束位置的数组,如果未找到则返回[-1, -1] */varsearchRange=function(nums,target){// 查找目标值的左边界(第一次出现的位置)letleft=search(nums,target,true);// 查找目标值的右边界(最后一次出现的位置)letright=search(nums,target,false);// 返回结果数组return[left,right];};/** * 二分查找辅助函数,用于查找目标值的边界 * @param {number[]} nums - 已排序的升序数组 * @param {number} target - 要查找的目标值 * @param {boolean} isLeft - 标识查找的是左边界(true)还是右边界(false) * @return {number} - 返回找到的边界索引,未找到则返回-1 */functionsearch(nums,target,isLeft){// 初始化二分查找的左右指针letleft=0;letright=nums.length-1;// 初始化结果索引为-1(表示未找到)letindex=-1;// 二分查找主循环while(left<=right){// 计算中间索引letmid=Math.floor((left+right)/2);if(nums[mid]>target){// 中间值大于目标值,在左半部分继续查找right=mid-1;}elseif(nums[mid]<target){// 中间值小于目标值,在右半部分继续查找left=mid+1;}else{// 找到目标值,记录当前索引index=mid;if(isLeft){// 如果是查找左边界,继续在左半部分查找更早出现的位置right=mid-1;}else{// 如果是查找右边界,继续在右半部分查找更晚出现的位置left=mid+1;}}}// 返回找到的边界索引(如果未找到则为-1)returnindex;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 9:15:37

力扣刷题:有效的正方形

题目&#xff1a; 给定2D空间中四个点的坐标 p1, p2, p3 和 p4&#xff0c;如果这四个点构成一个正方形&#xff0c;则返回 true 。 点的坐标 pi 表示为 [xi, yi] 。 输入没有任何顺序 。 一个 有效的正方形 有四条等边和四个等角(90度角)。 示例 1:输入: p1 [0,0], p2 [1,1]…

作者头像 李华
网站建设 2026/3/27 19:13:41

Spring Boot 服务迁移到 Docker + Kubernetes实践过程

从一个正确的 Dockerfile 开始 性能优化,第一步永远不是 JVM 参数,而是 镜像构建方式。 生产级 Dockerfile 示例 # -------- 构建阶段 -------- FROM maven:3.9.4-eclipse-temurin-17 AS build WORKDIR /app# 先拷贝 pom.xml,用于依赖缓存 COPY pom.xml . RUN mvn -q -e …

作者头像 李华
网站建设 2026/3/13 5:09:26

5步掌握KrillinAI马来语语音处理:从零到企业级实战指南

想要将中文视频快速转化为马来语版本&#xff1f;KrillinAI作为基于AI大模型的视频翻译配音工具&#xff0c;通过深度整合语音识别&#xff08;ASR&#xff09;、机器翻译&#xff08;MT&#xff09;和文本转语音&#xff08;TTS&#xff09;三大核心技术&#xff0c;让马来语语…

作者头像 李华
网站建设 2026/3/26 22:56:56

20、Java 单元测试:从基础到高级技巧

Java 单元测试:从基础到高级技巧 在 Java 开发中,单元测试是保证代码质量和稳定性的重要手段。本文将深入探讨 Java 单元测试中的多个关键主题,包括消除冗余、批量自动化测试、异常处理以及模拟对象的使用。 1. 消除测试代码中的冗余 在测试类中,每个 testXXXXX() 方法…

作者头像 李华
网站建设 2026/3/28 7:13:58

Dify镜像集成Nginx实现反向代理与负载均衡

Dify镜像集成Nginx实现反向代理与负载均衡 在企业级AI应用快速落地的今天&#xff0c;如何让一个基于大语言模型&#xff08;LLM&#xff09;的开发平台既具备高效的可视化编排能力&#xff0c;又能稳定支撑高并发访问&#xff1f;这不仅是架构师关心的问题&#xff0c;也是每一…

作者头像 李华
网站建设 2026/3/13 13:49:01

uniapp+vue基于微信小程序的校园警务师生出入登记系统 论文

文章目录具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1万…

作者头像 李华