当前位置: 首页 > 科技观察

在排序数组中找到元素的第一个和最后一个位置

时间:2023-03-15 00:59:44 科技观察

给定一个按升序排列的整数数组nums和一个目标值target。找出给定目标值在数组中的开始和结束位置。你的算法的时间复杂度必须是O(logn)级别。如果数组中不存在目标值,则返回[-1,-1]。示例1:输入:nums=[5,7,7,8,8,10],target=8输出:[3,4]示例2:输入:nums=[5,7,7,8,8,10],target=6输出:[-1,-1]答案1:findIndex,lastIndexOffindIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。如果没有找到相应的元素,则返回-1。lastIndexOf()方法返回数组中指定元素(即有效的JavaScript值或变量)的最后一个索引,如果不存在则返回-1。答案二:二分查找letsearchRange=function(nums,target){return[leftSearch(nums,target),rightSearch(nums,target)]}letleftSearch=function(nums,target){letlow=0,high=nums.length-1、midwhile(low<=high){mid=Math.floor((low+high)/2)if(nums[mid]target){high=mid-1}elseif(nums[mid]===target){//这里不要返回,继续缩小左边界high=mid-1}}//最后检查low是否越界或命中if(low>=nums.length||nums[low]!=target)return-1returnlow}letrightSearch=function(nums,target){letlow=0,high=nums.length-1,midwhile(low<=high){mid=数学。floor((low+high)/2)if(nums[mid]target){high=mid-1}elseif(nums[mid]===target){//这里不要返回,继续缩小右边界low=mid+1}}//最后检查high是否越界或命中if(high<0||nums[high]!=target)return-1returnhigh}复杂度分析:时间复杂度:O(logn)空间复杂度:O(1)leetcode:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-排序数组/