在排序数组中查找元素的第一个和最后一个位置
2026年5月3日大约 1 分钟
在排序数组中查找元素的第一个和最后一个位置
使用的方法
二分查找
解题思路
- 给定一个按照升序排列的整数数组
nums,和一个目标值target,找出给定目标值在数组中的开始位置和结束位置。 - 如果数组中不存在目标值,返回
[-1, -1]。 - 由于数组是有序的,我们可以使用二分查找来高效地找到目标值的开始位置和结束位置。
- 首先,我们使用二分查找来找到目标值的开始位置。我们在二分查找的过程中,如果找到目标值,我们继续向左半部分搜索,直到找到第一个不等于目标值的位置,这样我们就得到了目标值的开始位置。
- 接下来,我们使用二分查找来找到目标值的结束位置。我们在二分查找的过程中,如果找到目标值,我们继续向右半部分搜索,直到找到第一个不等于目标值的位置,这样我们就得到了目标值的结束位置。
- 最后,我们将开始位置和结束位置作为结果返回。
代码实现
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] pos = {-1,-1};
int left = 0;
int right = nums.length - 1;
// 查找开始位置
while(left <= right){
int mid = (left + right) / 2;
if(nums[mid] == target){
pos[0] = mid;
right = mid - 1;
} else if(nums[mid] < target){
left = mid + 1;
} else {
right = mid - 1;
}
}
left = 0;
right = nums.length - 1;
// 查找结束位置
while(left <= right){
int mid = (left + right) / 2;
if(nums[mid] == target){
pos[1] = mid;
left = mid + 1;
} else if(nums[mid] < target){
left = mid + 1;
} else {
right = mid - 1;
}
}
return pos;
}
}