- 题目:一个有序整型数组和一个查找目标值,返回等于目标值的数组位置(起始位置)
- 例子
给定[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;
}
}
本文介绍了一种在有序数组中查找特定目标值起始和结束位置的方法,使用了二分查找并结合前后扫描的技术来高效解决问题。
226

被折叠的 条评论
为什么被折叠?



