34. Find First and Last Position of Element in Sorted Array

34. Find First and Last Position of Element in Sorted Array

Description

Difficulty: Medium

Related Topics: Array, Binary Search

Given an array of integers nums sorted in non-decreasing order, find the starting and ending position of a given target value.

If target is not found in the array, return [-1, -1].

You must write an algorithm with O(log n) runtime complexity.

Example 1:

1
2
Input: nums = [5,7,7,8,8,10], target = 8
Output: [3,4]

Example 2:

1
2
Input: nums = [5,7,7,8,8,10], target = 6
Output: [-1,-1]

Example 3:

1
2
Input: nums = [], target = 0
Output: [-1,-1]

Constraints:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • nums is a non-decreasing array.
  • -109 <= target <= 109

Hints/Notes

Solution

Language: C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int left = findLeft(nums, target);
if (left == nums.size() || nums[left] != target) {
return {-1, -1};
}
int right = findLeft(nums, target + 1) - 1;
return {left, right};
}

int findLeft(vector<int>& nums, int target) {
// nums[left] < target
int left = -1, right = nums.size();
while (left + 1 < right) {
int mid = (right - left) / 2 + left;
if (nums[mid] < target) {
left = mid;
} else {
right = mid;
}
}
return right;
}
};