Find First and Last Position of Element in Sorted Array
Binary Search
Problem
Given an array of integers nums
sorted in ascending order, find the starting and ending position of a given target
value.
If target
is not found in the array, return [-1, -1]
.
Follow up: Could you write an algorithm with O(log n)
runtime complexity?
Thought Process
To find the first occurence/position of target, if num[mid] is greater than the target, then we have to move down. Along with this, if num[mid] is equal to the target, we have to move down because this potentially is not the first position of this element.
To find the last occurence/position of target, if num[mid] is less than the target then we have to keep moving up. Along with this we have to keep moving up if num[mid] is equal to target because it potentially may not be the last occurence/position of this element.
Solution
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
first = self.first(nums,target)
last = self.last(nums, target)
return [first,last]
def first(self, nums, target):
low, high = 0, len(nums)-1
res = -1
while low <= high:
mid = low + (high-low)//2
if nums[mid] >= target:
high = mid-1
elif nums[mid] < target:
low = mid+1
if nums[mid] == target:
res = mid
return res
def last(self, nums, target):
low, high = 0, len(nums)-1
res = -1
while low <= high:
mid = low + (high-low)//2
if nums[mid] <= target:
low = mid+1
elif nums[mid] > target:
high = mid-1
if nums[mid] == target:
res = mid
return res
Time Complexity
Time: O(log n)
Space: O(1)
Last updated
Was this helpful?