Leetcode 34. Find First and Last Position of Element in Sorted Array
领扣 34. 在排序数组中查找元素的第一个和最后一个位置
在一个排序的数组nums
中,返回target
第一次和最后一次出现的位置
如果target
不存在,返回[-1, -1]
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> result;
int index1 = binary_search_first( nums, target );
if( index1 == -1 )
return vector<int>(2, -1);
int index2 = binary_search_last( nums, target );
result.push_back( index1 );
result.push_back( index2 );
return result;
}
int binary_search_first( vector<int>& nums, int target )
{
int left = 0, right = nums.size() - 1;
while( left <= right )
{
int mid = left + ( right - left ) / 2;
if( target == nums[mid] )
{
// 虽然已经找到target,但仍需考虑nums[mid-1]
// mid - 1需要判断是否越界
if( mid - 1 >= 0 && nums[mid - 1] == target )
right = mid - 1;
else
return mid;
}
else if( target > nums[mid] )
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
int binary_search_last( vector<int>& nums, int target )
{
int left = 0, right = nums.size() - 1;
while( left <= right )
{
int mid = left + ( right - left ) / 2;
if( target == nums[mid] )
{
// 虽然已经找到target,但仍需考虑nums[mid+1]
// mid + 1需要判断是否越界
if( mid + 1 < nums.size() && nums[mid + 1] == target )
left = mid + 1;
else
return mid;
}
else if( target > nums[mid] )
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
};
【相似题目】
nowcoder 数字在排序数组中出现的次数
class Solution {
public:
int GetNumberOfK(vector<int> nums ,int target) {
int index1 = binary_search_first( nums, target );
if( index1 == -1 )
return 0;
int index2 = binary_search_last( nums, target );
return index2 - index1 + 1;
}
}