在排序数组中查找元素的第一个和最后一个位置
问题陈述
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。
你的算法时间复杂度必须是 O(log n) 级别。
如果数组中不存在目标值,返回 [-1, -1]。
示例:
1 2
| 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4]
|
思路分析
定义一个存储该元素起始索引和终止索引两个元素的数组。初始化为{-1,-1},从头开始遍历到第一个元素,赋给数组的第一个元素。如果第一个匹配索引找不到,直接返回{-1,-1}。如果第一个索引找到,则继续从数组尾开始遍历找到第二个匹配索引,赋给数组第二个元素。
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public class SearchRange { public int[] getRange(int[] nums,int target){ int[] range={-1,-1}; for(int i=0;i<nums.length;i++){ if(nums[i]==target){ range[0]=i; break; } } if(range[0]==-1){ return range; } for(int j=nums.length-1;j>=0;j--){ if(nums[j]==target){ range[1]=j; break; } } for(int c:range) System.out.println(c); return range; } public static void main(String[] args){ int[] nums={2,4,6,6,6,9,11}; SearchRange searchRange=new SearchRange(); searchRange.getRange(nums,6);
} }
|