Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.
Your algorithm's runtime complexity must be in the order of O(log n).
If the target is not found in the array, return [-1, -1]
.
For example,
Given[5, 7, 7, 8, 8, 10]
and target value 8, return [3, 4]
.
这一题是从一个有序数组中找出一个数的开始位置和结束位置。这个题目跟求数组中一个数的个数一样(出现次数)。
平常的做法,直接遍历 ,复杂的是O(n),因为有序,用二分查找。复杂度为O(logn)。
像这种查找,因为有重复数字,可以分两步。
1,找出target,如果有多个,求出第一次出现的那个(有序以后)。
2,找出最后一次出现的那个。
如果求个数,则两者相减。。所以这两个步骤都要掌握。
见下面的标记。。一定记住
class Solution { public int[] searchRange(int[] nums, int target) { int[] result=new int[2]; if(nums==null||nums.length==0){ result[0]=-1; result[1]=-1; return result; } int left=0; int right=nums.length-1; //查找最左边的位置 while(lefttarget) right=mid-1; else if(nums[mid] target) right=mid-1; else if(nums[mid]