news 2026/10/17 7:21:38

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

作者头像

张小明

前端开发工程师

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/10/15 8:53:27

ArduPilot传感器驱动终极实战指南:从零到一的完整开发流程

ArduPilot传感器驱动终极实战指南&#xff1a;从零到一的完整开发流程 【免费下载链接】ardupilot 项目地址: https://gitcode.com/gh_mirrors/ard/ardupilot 你是否曾经面对全新的传感器却无从下手&#xff1f;是否在无人机感知系统集成时感到困惑&#xff1f;本文将为…

作者头像 李华
网站建设 2026/10/15 2:12:49

AutoAWQ模型量化实战:3倍性能提升的完整指南

AutoAWQ模型量化实战&#xff1a;3倍性能提升的完整指南 【免费下载链接】AutoAWQ AutoAWQ implements the AWQ algorithm for 4-bit quantization with a 2x speedup during inference. 项目地址: https://gitcode.com/gh_mirrors/au/AutoAWQ 还在为大语言模型推理速度…

作者头像 李华
网站建设 2026/10/15 19:08:23

如何快速解决Linux无线网卡兼容性问题:RTL8188EU驱动完整指南

如何快速解决Linux无线网卡兼容性问题&#xff1a;RTL8188EU驱动完整指南 【免费下载链接】rtl8188eu Repository for stand-alone RTL8188EU driver. 项目地址: https://gitcode.com/gh_mirrors/rt/rtl8188eu 还在为Linux系统无法识别无线网卡而烦恼吗&#xff1f;RTL8…

作者头像 李华
网站建设 2026/10/15 20:45:38

终极指南:如何用IINA打造完美的macOS视频播放体验

终极指南&#xff1a;如何用IINA打造完美的macOS视频播放体验 【免费下载链接】iina 项目地址: https://gitcode.com/gh_mirrors/iin/iina 还在为macOS上找不到好用的视频播放器而烦恼吗&#xff1f;IINA视频播放器作为专为苹果用户设计的播放工具&#xff0c;完美解决…

作者头像 李华
网站建设 2026/10/14 19:40:59

24、《测试驱动开发与设计模式中的测试挑战及解决方案》

《测试驱动开发与设计模式中的测试挑战及解决方案》 1. 测试性与设计模式带来的挑战 可测试性是衡量代码质量的重要线索,但使用设计模式有时却会引发测试问题。如果设计模式反映的特性正是测试期望引导我们达成的,为何使用模式反而让测试变得更难了呢? 就像一个著名的故事…

作者头像 李华
网站建设 2026/10/16 22:52:27

33、软件设计中的沟通、模式与可维护性

软件设计中的沟通、模式与可维护性 1. 沟通的本质与软件的类比 在交流中,我们常常忽略了一个重要的事实:语言只是沟通的“令牌”。就像几年前参加的一门关于语言和信息传递的课程中提到的,两个人交谈时,话语本身并非沟通,而是沟通意义的代表。在任何形式的交流里,都存在…

作者头像 李华