二分法思想
34. Find First and Last Position of Element in Sorted Array
Medium
2152100FavoriteShare
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) {
int left=0,right=nums.size()-1;
int i=0;
for(i=0;i<nums.size();i++){
if(nums[i]==target){
left=i;
break;
}
}
if(i==nums.size()) return {-1,-1};
for(i=nums.size()-1;i>=left;i--){
if(nums[i]==target){
right=i;
break;
}
}
return {left,right};
}
};
- Runtime: 8 ms, faster than 84.93% of C++ online submissions for Find First and Last Position of Element in Sorted Array.
- Memory Usage: 10.4 MB, less than 82.42% of C++ online submissions for Find First and Last Position of Element in Sorted Array.
- Next challenges:
- Subarray Product Less Than K
- Advantage Shuffle
- Super Egg Drop
- 以下使用二分法思想:
class Solution {
public:
int findFirst(vector<int>& nums,int target){
int index=-1,start=0,end=nums.size()-1;
while(start<=end){
int mid=start+(end-start)/2;
if(nums[mid]>=target) end=mid-1;
else start=mid+1;
if(nums[mid]==target) index=mid;
}
return index;
}
int findLast(vector<int>& nums,int target){
int index=-1,start=0,end=nums.size()-1;
while(start<=end){
int mid=start+(end-start)/2;
if(nums[mid]<=target) start=mid+1;
else end=mid-1;
if(nums[mid]==target) index=mid;
}
return index;
}
vector<int> searchRange(vector<int>& nums, int target) {
int first=findFirst(nums,target);
int last=findLast(nums,target);
return {first,last};
}
};
- Runtime: 8 ms, faster than 84.93% of C++ online submissions for Find First and Last Position of Element in Sorted Array.
- Memory Usage: 10.2 MB, less than 98.90% of C++ online submissions for Find First and Last Position of Element in Sorted Array.