- 题目:一个有序整型数组和一个查找目标值,返回等于目标值的数组位置(起始位置)
- 例子
给定[5, 7, 7, 8, 8, 10]这个数组,目标值为8,返回结果为[3,4]
- 例子
- 难度:Medium
思路:因为是一个有序的数组,又是查找目标值,所以自然想到用二分查找,但是这个题目需要在二分查找的基础上增加一个往前往后查找(即找到目标值后,需要看数组中是否还存在等于目标值的,找到等于目标值的位置范围) 实现这个只需要用两个while循环
代码:
public class Solution {
public int[] searchRange(int[] nums, int target) {
int result[] = new int[2];
result[0] = -1;
result[1] = -1;
if(nums == null || nums.length == 0 || target < nums[0] || target > nums[nums.length-1]){
return result;
}
int low = 0;
int high = nums.length-1;
while(low <= high){
int mid = low + (high-low)/2;
if(target < nums[mid]){
high = mid-1;
}else if(target > nums[mid]){
low = mid+1;
}else{
//找到目标值后,分别往前往后寻找下一个等于目标值的位置
int start = mid;
int end = mid;
while(start > 0 && nums[start-1] == nums[start]){
start--;
}
while(end < nums.length-1 && nums[end+1] == nums[end]){
end++;
}
result[0] = start;
result[1] = end;
return result;
}
}
return result;
}
}