Find First and Last Position — Dual Left/Right Boundary

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem 309 · Find First and Last Position of Element in Sorted Array

Difficulty: Medium · Pattern: Left + Right Boundary

Solutions

# Python
def searchRange(nums, target):
    def left_bound():
        lo, hi = 0, len(nums)
        while lo < hi:
            mid = (lo+hi)//2
            if nums[mid] < target: lo = mid+1
            else: hi = mid
        return lo

    def right_bound():
        lo, hi = 0, len(nums)
        while lo < hi:
            mid = (lo+hi)//2
            if nums[mid] <= target: lo = mid+1
            else: hi = mid
        return lo-1

    l = left_bound()
    if l == len(nums) or nums[l] != target: return [-1,-1]
    return [l, right_bound()]
// Java
public int[] searchRange(int[] nums, int target) {
    int left=lb(nums,target), right=rb(nums,target);
    if (left==nums.length||nums[left]!=target) return new int[]{-1,-1};
    return new int[]{left,right};
}
int lb(int[] nums, int t) { int lo=0,hi=nums.length; while(lo<hi){int m=(lo+hi)/2;if(nums[m]<t)lo=m+1;else hi=m;} return lo; }
int rb(int[] nums, int t) { int lo=0,hi=nums.length; while(lo<hi){int m=(lo+hi)/2;if(nums[m]<=t)lo=m+1;else hi=m;} return lo-1; }

Complexity

  • Time: O(log n)
  • Space: O(1)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro