34. 在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-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]
题解:
package array; public class L34 { public static int[] searchRange(int[] nums, int target) { int index = searchIndex(nums,target,0,nums.length-1); int lowIndex = index,highIndex = index; if(lowIndex == -1 && highIndex == -1){ return new int[]{lowIndex,highIndex}; } while(lowIndex >= 0 && nums[lowIndex] == target){ lowIndex --; } lowIndex++; while(highIndex<nums.length && nums[highIndex] == target){ highIndex ++; } highIndex--; return new int[]{lowIndex,highIndex}; } public static int searchIndex(int[] nums, int target,int start,int end){ while(start <= end){ if(nums[(start+end)/2] == target){ return (start+end)/2; }else if(nums[(start+end)/2] > target){ end = (start+end)/2-1; return searchIndex(nums, target,start,end); }else { start = (start+end)/2+1; return searchIndex(nums, target,start,end); } } return -1; } public static void main(String[] args) { int[] nums = {1}; int[] returnNums = searchRange(nums,1); System.out.println(returnNums[0]+" " +returnNums[1]); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步