news 2026/4/3 12:29:15

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

作者头像

张小明

前端开发工程师

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/20 1:33:57

【好写作AI】导师没空逐字改?AI当你的“24小时反馈教练”

好写作AI最珍贵的&#xff0c;不是替你写&#xff0c;而是告诉你“怎么写更好”——并让你学会自己看出问题。好写作AI官方网址&#xff1a;https://www.haoxiezuo.cn/一、写完论文后&#xff0c;你是否也经历过这种“迷茫”&#xff1f;“写是写完了&#xff0c;但心里完全没底…

作者头像 李华
网站建设 2026/3/27 6:30:40

2025教育数字化革命:tessdata如何重塑智能评估新范式

面对教育数字化转型的浪潮&#xff0c;传统的人工阅卷模式正面临前所未有的挑战。据教育管理部门统计数据显示&#xff0c;2024年全国中小学试卷总量超过50亿份&#xff0c;而教师平均每天需要花费3-4小时在批改作业上。tessdata作为OCR领域的专业训练数据集合&#xff0c;正以…

作者头像 李华
网站建设 2026/3/29 15:55:28

PoeCharm完全指南:掌握流放之路角色构建的终极工具

PoeCharm完全指南&#xff1a;掌握流放之路角色构建的终极工具 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 还在为《流放之路》复杂的角色配装而烦恼吗&#xff1f;PoeCharm作为Path of Buildin…

作者头像 李华
网站建设 2026/4/1 16:50:50

快速掌握USD Unity SDK:从零开始的高效开发指南

快速掌握USD Unity SDK&#xff1a;从零开始的高效开发指南 【免费下载链接】usd-unity-sdk Integration of Pixars Universal Scene Description into Unity 项目地址: https://gitcode.com/gh_mirrors/us/usd-unity-sdk USD Unity SDK是Unity官方提供的Pixar通用场景描…

作者头像 李华
网站建设 2026/4/3 4:27:26

18、软件开发中的单元测试:价值、实践与工具

软件开发中的单元测试:价值、实践与工具 在软件开发领域,测试一直是一个备受关注的话题。曾经,我认为测试是质量保证(QA)人员的工作,与我作为开发者的职责无关。当像 Kent Beck、Ron Jeffries、Ward Cunningham 等人开始推广测试对开发者有价值且应成为开发过程一部分的…

作者头像 李华