Find First and Last Position of Element in Sorted Array
程序员文章站
2024-03-20 17:44:34
...
leetcode34
Given an array of integers nums 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].
Example 1:
Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]
Example 2:
Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]
主要利用二分查找的思想,先找出开始位置,再找出结束位置,代码如下:
class Solution {
public:
vector<int> searchRange(vector<int> nums, int target) {
vector<int> res(2, -1); //存储结果
int n = nums.size();
if(n == 0) return res;
res[0] = first(nums, n, target);
if(res[0]==-1)
return res;
else{
res[1] = last(nums, n, target);
return res;
}
}
// find the starting position
int first(vector<int> nums, int n, int target){
int left = 0;
int right = n - 1;
while(left < right){
int mid = (left + right) / 2; //下取整
if(nums[mid] == target){
right = mid;
}else if(nums[mid] < target){
left = mid + 1;
}else{
right = mid - 1;
}
}
if(right>=0 && nums[right] == target) return right;
if(left>=0 && nums[left] == target) return left;
return -1;
}
// find the ending position
int last(vector<int> nums, int n, int target){
int left = 0;
int right = n - 1;
while(left < right){
int mid = (left + right + 1)/ 2; //和first不同的地方,上取整
if(nums[mid] == target){
left = mid; //和first不同的地方
}else if(nums[mid] < target){
left = mid + 1;
}else{
right = mid-1;
}
}
// post processing
if(right>=0 && nums[right] == target) return right;
if(left>=0 && nums[left] == target) return left;
return -1;
}
};
推荐阅读
-
Find First and Last Position of Element in Sorted Array
-
leetcode array binarysearch|34. Find First and Last Position of Element in Sorted Array
-
算法34. Find First and Last Position of Element in Sorted Array
-
LeetCode算法系列:34. Find First and Last Position of Element in Sorted Array
-
Find First and Last Position of Element in Sorted Array
-
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 Find First and Last Position of Element in Sorted Array(C语言)
-
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 Find First and Last Position of Element in Sorted Array
-
BinarySearch[5]34. Find First and Last Position of Element in Sorted Array
-
Find First and Last Position of Element in Sorted Array
-
算法42--Find First and Last Position of Element in Sorted Array