Skip to main content

Leetcode 34: Find First and Last Position of Element in Sorted Array

 

1. Problem Statement (Simple Explanation):


You’re given:

  • A sorted array nums in non-decreasing order.

  • An integer target.

You must:

  • Return a 2-element array [firstIndex, lastIndex] where:

    • firstIndex = index of the first occurrence of target

    • lastIndex = index of the last occurrence of target

  • If target is not present, return [-1, -1].

You must use an O(log n) algorithm → binary search.


2. Examples:


Example 1:

Input: nums = [5,7,7,8,8,10], target = 8

8 appears at indices 3 and 4.

Output: [3, 4]


Example 2:

Input: nums = [5,7,7,8,8,10], target = 6

6 is not present.

Output: [-1, -1]


Example 3:

Input: nums = [], target = 0

Empty array.

Output: [-1, -1]


3. Approach – Two Binary Searches (Lower Bound & Upper Bound):


We’ll do two modified binary searches:

  1. findFirst – find the leftmost index where nums[i] == target.

  2. findLast – find the rightmost index where nums[i] == target.


Find First Occurrence:


We want the smallest index i such that nums[i] >= target and nums[i] == target.

Binary search:

  • left = 0, right = n - 1, first = -1.

  • While left <= right:

    • mid = left + (right - left) / 2

    • If nums[mid] == target:

      • Save first = mid

      • Move right = mid - 1 to search further left

    • Else if nums[mid] < target:

      • Move right: left = mid + 1

    • Else (nums[mid] > target):

      • Move left: right = mid - 1

At the end, first is index of first occurrence or -1 if not found.


Find Last Occurrence::


We want the largest index i such that nums[i] <= target and nums[i] == target.

Binary search:

  • left = 0, right = n - 1, last = -1.

  • While left <= right:

    • mid = left + (right - left) / 2

    • If nums[mid] == target:

      • Save last = mid

      • Move left = mid + 1 to search further right

    • Else if nums[mid] < target:

      • Move right: left = mid + 1

    • Else:

      • Move left: right = mid - 1

At the end, last is index of last occurrence or -1.


Final Answer:


  • Compute first = findFirst(nums, target)

  • If first == -1: return [-1, -1] (target not present).

  • Else compute last = findLast(nums, target)

  • Return [first, last].


Pseudo-code:



Complexity:


  • Each binary search: O(logn)

  • Two searches: still O(logn)

  • Extra space: O(1)


4. Java code:



5. C code:



6. C++ code:



7. Python code:



8. JavaScript code:



Comments

Popular posts from this blog

Leetcode 1: Two Sum

  Leetcode Link: https://leetcode.com/problems/two-sum/ 1. Problem Statement (Simple Explanation) You are given: An array of integers nums An integer target You need to  return the indices of two numbers in the array  such that: Conditions: Each input has  exactly one solution . You  cannot use the same element twice . You can return the answer in  any order . 2. Examples Example 1 Input:                                    nums = [2, 7, 11, 15], target = 9 Output:                                 [0, 1] Explanation:                     nums[0]+nums[1]=2+7=9              So we return [0, 1]. Example 2 Input:           ...

Leetcode 3: Longest Substring Without Repeating Characters

  Leetcode Link 1. Problem Statement (Simple Explanation) You are given a string s. You need to find the length of the longest substring of s that does not  contain any repeated characters. A substring is a contiguous sequence of characters in the string. You must return an integer length, not the substring itself. 2. Examples Example 1 Input: s = "abcabcbb" Output: 3 Explanation: Some substrings without repeating characters: "abc", "bca", "cab"The longest length is 3. Example 2 Input: s = "bbbbb" Output: 1 Explanation: All substrings that are valid are just "b". The longest length is 1. Example 3 Input:   s = "pwwkew" Output:   3 Explanation: Possible substrings without repetition: "pw", "wke", "kew". "wke" or "kew" have length 3. "pwke" is not valid because it’s not contiguous in the original string (p and k are separated by ww). Constraints...

Leetcode 2: Add Two Numbers

Leetcode Link: https://leetcode.com/problems/add-two-numbers/ 1. Problem Statement (Simple Explanation) You are given  two non-empty linked lists , l1 and l2, that represent two non-negative integers. Each node contains a  single digit . The digits are stored in  reverse order  (i.e., the 1’s digit is at the head). You need to  add the two numbers  and return the  sum as a linked list , also in reverse order. You can assume: There are  no leading zeros , except when the number itself is 0. 2. Examples Example 1 Input:                l1 = [2,4,3]                l2 = [5,6,4]           Interpreting linked lists as numbers (reverse order): l1 represents 342 l2 represents 465 Output:                [7,0,8] Explanation:        ...