给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
function searchRange(nums, target) { let getPreNextIndex = (val,index,arr) => { let returnArr = [index,index] if(index == 0){ for(let i = index + 1;i < arr.length;i++){ if(arr[i] == val){ returnArr[1] = i }else{ break; } } return returnArr } if(index == arr.length -1){ for(let i = index - 1;i > -1;i--){ if(arr[i] == val){ returnArr[0] = i }else{ break } } return returnArr } for(let i = index - 1;i > -1;i--){ if(arr[i] == val){ returnArr[0] = i }else{ break } } for(let i = index + 1;i < arr.length;i++){ if(arr[i] == val){ returnArr[1] = i }else{ break; } } return returnArr } if(nums.length == 1){ if(nums[0] == target){ return [0,0] } return [-1,-1] } let start = 0,end = nums.length - 1; while(start <= end){ let mid = parseInt((start + end) / 2); if(target == nums[mid]){ return getPreNextIndex(mid,nums,target) }else if(target > nums[mid]){ start = mid + 1 }else if(target < nums[mid]){ end = mid - 1 } } return [-1 ,-1] }
Leecode提交通过