Find first and last positions of an element in a sorted array - GeeksforGeeks

09 Mar, 2022
Given a sorted array with possibly duplicate elements, the task is to find indexes of first and last occurrences of an element x in the given array. 
Examples: 
Input : arr[] = {1, 3, 5, 5, 5, 5, 67, 123, 125}    
        x = 5
Output : First Occurrence = 2
         Last Occurrence = 5

Input : arr[] = {1, 3, 5, 5, 5, 5, 7, 123, 125 }    
        x = 7
Output : First Occurrence = 6
         Last Occurrence = 6
The Naive Approach is to run a for loop and check given elements in an array.  
1. Run a for loop and for i = 0 to n-1
2. Take first = -1 and last = -1 
3. When we find element first time then we update first = i 
4. We always update last=i whenever we find the element.
5. We print first and last.
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find first and last occurrence of// an elements in given sorted array#include <bits/stdc++.h>using namespace std; // Function for finding first and last occurrence// of an elementsvoid findFirstAndLast(int arr[], int n, int x){    int first = -1, last = -1;    for (int i = 0; i < n; i++) {        if (x != arr[i])            continue;        if (first == -1)            first = i;        last = i;    }    if (first != -1)        cout << "First Occurrence = " << first             << "\nLast Occurrence = " << last;    else        cout << "Not Found";} // Driver codeint main(){    int arr[] = { 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 };    int n = sizeof(arr) / sizeof(int);    int x = 8;    findFirstAndLast(arr, n, x);    return 0;}
// Java program to find first and last occurrence of// an elements in given sorted arrayimport java.io.*; class GFG {    // Function for finding first and last occurrence    // of an elements    public static void findFirstAndLast(int arr[], int x)    {        int n = arr.length;        int first = -1, last = -1;        for (int i = 0; i < n; i++) {            if (x != arr[i])                continue;            if (first == -1)                first = i;            last = i;        }        if (first != -1) {            System.out.println("First Occurrence = " + first);            System.out.println("Last Occurrence = " + last);        }        else            System.out.println("Not Found");    }     public static void main(String[] args)    {        int arr[] = { 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 };        int x = 8;        findFirstAndLast(arr, x);    }}
# Python 3 program to find first and# last occurrence of an elements in# given sorted array  # Function for finding first and last# occurrence of an elementsdef findFirstAndLast(arr, n, x) :    first = -1    last = -1    for i in range(0, n) :        if (x != arr[i]) :            continue        if (first == -1) :            first = i        last = i         if (first != -1) :        print( "First Occurrence = ", first,               " \nLast Occurrence = ", last)    else :        print("Not Found")                  # Driver codearr = [1, 2, 2, 2, 2, 3, 4, 7, 8, 8 ]n = len(arr)x = 8findFirstAndLast(arr, n, x)      # This code is contributed by Nikita Tiwari.
// C# program to find first and last// occurrence of an elements in given// sorted arrayusing System; class GFG {     // Function for finding first and    // last occurrence of an elements    static void findFirstAndLast(int[] arr,                                 int x)    {        int n = arr.Length;        int first = -1, last = -1;         for (int i = 0; i < n; i++) {            if (x != arr[i])                continue;            if (first == -1)                first = i;            last = i;        }        if (first != -1) {            Console.WriteLine("First "                              + "Occurrence = " + first);            Console.Write("Last "                          + "Occurrence = " + last);        }        else            Console.Write("Not Found");    }     // Driver code    public static void Main()    {        int[] arr = { 1, 2, 2, 2, 2, 3,                      4, 7, 8, 8 };        int x = 8;        findFirstAndLast(arr, x);    }} // This code is contributed by nitin mittal.
<?php// PHP program to find first and last// occurrence of an elements in given// sorted array // Function for finding first and last// occurrence of an elementsfunction findFirstAndLast( $arr, $n, $x){    $first = -1; $last = -1;    for ( $i = 0; $i < $n; $i++)    {        if ($x != $arr[$i])            continue;        if ($first == -1)            $first = $i;        $last = $i;    }    if ($first != -1)        echo "First Occurrence = ", $first,              "\n", "\nLast Occurrence = ",                                     $last;    else        echo "Not Found";} // Driver code    $arr = array(1, 2, 2, 2, 2, 3, 4,                                 7, 8, 8 );    $n = count($arr);    $x = 8;         findFirstAndLast($arr, $n, $x);     // This code is contributed by anuj_67.?>
<script>// Javascript program to find first and last occurrence of// an elements in given sorted array         // Function for finding first and last occurrence    // of an elements    function findFirstAndLast(arr,x)    {        let n = arr.length;        let first = -1, last = -1;        for (let i = 0; i < n; i++) {            if (x != arr[i])                continue;            if (first == -1)                first = i;            last = i;        }        if (first != -1) {            document.write("First Occurrence = " + first + "<br>");            document.write("Last Occurrence = " + last + "<br>");        }        else            document.write("Not Found");    }         let arr = [1, 2, 2, 2, 2, 3, 4, 7, 8, 8 ];    let x = 8;    findFirstAndLast(arr, x);         // This code is contributed by avanitrachhadiya2155</script>
First Occurrence = 8nLast Occurrence = 9
 
Time Complexity: O(n) Auxiliary Space: O(1) An Efficient solution to this problem is to use a binary search. 1. For the first occurrence of a number 
  a) If (high >= low)
  b) Calculate  mid = low + (high - low)/2;
  c) If ((mid == 0 || x > arr[mid-1]) && arr[mid] == x)
         return mid;
  d) Else if (x > arr[mid])
        return first(arr, (mid + 1), high, x, n);
  e) Else
        return first(arr, low, (mid -1), x, n);
  f) Otherwise return -1;
2. For the last occurrence of a number 
  a) if (high >= low)
  b) calculate mid = low + (high - low)/2;
  c)if( ( mid == n-1 || x < arr[mid+1]) && arr[mid] == x )
         return mid;
  d) else if(x < arr[mid])
        return last(arr, low, (mid -1), x, n);
  e) else
       return last(arr, (mid + 1), high, x, n);      
  f) otherwise return -1;
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find first and last occurrences of// a number in a given sorted array#include <bits/stdc++.h>using namespace std; /* if x is present in arr[] then returns the index of   FIRST occurrence of x in arr[0..n-1], otherwise   returns -1 */int first(int arr[], int low, int high, int x, int n){    if (high >= low) {        int mid = low + (high - low) / 2;        if ((mid == 0 || x > arr[mid - 1]) && arr[mid] == x)            return mid;        else if (x > arr[mid])            return first(arr, (mid + 1), high, x, n);        else            return first(arr, low, (mid - 1), x, n);    }    return -1;} /* if x is present in arr[] then returns the index of   LAST occurrence of x in arr[0..n-1], otherwise   returns -1 */int last(int arr[], int low, int high, int x, int n){    if (high >= low) {        int mid = low + (high - low) / 2;        if ((mid == n - 1 || x < arr[mid + 1]) && arr[mid] == x)            return mid;        else if (x < arr[mid])            return last(arr, low, (mid - 1), x, n);        else            return last(arr, (mid + 1), high, x, n);    }    return -1;} // Driver programint main(){    int arr[] = { 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 };    int n = sizeof(arr) / sizeof(int);     int x = 8;    printf("First Occurrence = %d\t",           first(arr, 0, n - 1, x, n));    printf("\nLast Occurrence = %d\n",           last(arr, 0, n - 1, x, n));     return 0;}
// Java program to find first and last occurrence of// an elements in given sorted arrayimport java.io.*; class GFG {    /* if x is present in arr[] then returns the index of    FIRST occurrence of x in arr[0..n-1], otherwise    returns -1 */    public static int first(int arr[], int low, int high, int x, int n)    {        if (high >= low) {            int mid = low + (high - low) / 2;            if ((mid == 0 || x > arr[mid - 1]) && arr[mid] == x)                return mid;            else if (x > arr[mid])                return first(arr, (mid + 1), high, x, n);            else                return first(arr, low, (mid - 1), x, n);        }        return -1;    }     /* if x is present in arr[] then returns the index of    LAST occurrence of x in arr[0..n-1], otherwise    returns -1 */    public static int last(int arr[], int low, int high, int x, int n)    {        if (high >= low) {            int mid = low + (high - low) / 2;            if ((mid == n - 1 || x < arr[mid + 1]) && arr[mid] == x)                return mid;            else if (x < arr[mid])                return last(arr, low, (mid - 1), x, n);            else                return last(arr, (mid + 1), high, x, n);        }        return -1;    }     public static void main(String[] args)    {         int arr[] = { 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 };        int n = arr.length;        int x = 8;        System.out.println("First Occurrence = " + first(arr, 0, n - 1, x, n));        System.out.println("Last Occurrence = " + last(arr, 0, n - 1, x, n));    }}
# Python 3 program to find first and# last occurrences of a number in# a given sorted array # if x is present in arr[] then# returns the index of FIRST# occurrence of x in arr[0..n-1],# otherwise returns -1def first(arr, low, high, x, n) :    if(high >= low) :        mid = low + (high - low) // 2        if( ( mid == 0 or x > arr[mid - 1]) and arr[mid] == x) :            return mid        else if(x > arr[mid]) :            return first(arr, (mid + 1), high, x, n)        else :            return first(arr, low, (mid - 1), x, n)         return -1  # if x is present in arr[] then# returns the index of LAST occurrence# of x in arr[0..n-1], otherwise# returns -1def last(arr, low, high, x, n) :    if (high >= low) :        mid = low + (high - low) // 2        if (( mid == n - 1 or x < arr[mid + 1]) and arr[mid] == x) :            return mid        else if (x < arr[mid]) :            return last(arr, low, (mid - 1), x, n)        else :            return last(arr, (mid + 1), high, x, n)                 return -1      # Driver programarr = [1, 2, 2, 2, 2, 3, 4, 7, 8, 8]n = len(arr) x = 8print("First Occurrence = ",      first(arr, 0, n - 1, x, n))print("Last Occurrence = ",      last(arr, 0, n - 1, x, n))  # This code is contributed by Nikita Tiwari.
// C# program to find first and last occurrence// of an elements in given sorted arrayusing System; class GFG {     /* if x is present in arr[] then    returns the index of FIRST    occurrence of x in arr[0..n-1],    otherwise returns -1 */    public static int first(int[] arr, int low,                            int high, int x, int n)    {        if (high >= low) {            int mid = low + (high - low) / 2;             if ((mid == 0 || x > arr[mid - 1])                && arr[mid] == x)                return mid;            else if (x > arr[mid])                return first(arr, (mid + 1),                             high, x, n);            else                return first(arr, low,                             (mid - 1), x, n);        }         return -1;    }     /* if x is present in arr[] then returns    the index of LAST occurrence of x in    arr[0..n-1], otherwise returns -1 */    public static int last(int[] arr, int low,                           int high, int x, int n)    {        if (high >= low) {            int mid = low + (high - low) / 2;             if ((mid == n - 1 || x < arr[mid + 1])                && arr[mid] == x)                return mid;            else if (x < arr[mid])                return last(arr, low, (mid - 1),                            x, n);            else                return last(arr, (mid + 1),                            high, x, n);        }         return -1;    }     // Driver code    public static void Main()    {         int[] arr = { 1, 2, 2, 2, 2, 3, 4, 7,                      8, 8 };        int n = arr.Length;        int x = 8;        Console.WriteLine("First Occurrence = "                          + first(arr, 0, n - 1, x, n));         Console.Write("Last Occurrence = " + last(arr, 0, n - 1, x, n));    }} // This code is contributed by nitin mittal.
<?php// PHP program to find first// and last occurrences of a// number in a given sorted array // if x is present in arr[] then// returns the index of FIRST// occurrence of x in arr[0..n-1],// otherwise returns -1function first($arr, $low, $high,                          $x, $n){    if($high >= $low)    {        $mid = floor($low + ($high - $low) / 2);        if(($mid == 0 or $x > $arr[$mid - 1])                        and $arr[$mid] == $x)            return $mid;        else if($x > $arr[$mid])            return first($arr, ($mid + 1),                           $high, $x, $n);        else            return first($arr, $low, ($mid - 1),                                        $x, $n);    }    return -1;}  // if x is present in arr[]// then returns the index of// LAST occurrence of x in// arr[0..n-1], otherwise// returns -1function last($arr, $low, $high,                        $x, $n){    if ($high >= $low)    {        $mid = floor($low + ($high -                         $low) / 2);        if (( $mid == $n - 1 or $x <            $arr[$mid + 1]) and            $arr[$mid] == $x)                return $mid;        else if ($x < $arr[$mid])            return last($arr, $low,               ($mid - 1), $x, $n);        else            return last($arr, ($mid + 1),                          $high, $x, $n);    return -1;    }}     // Driver Code    $arr = array(1, 2, 2, 2, 2, 3, 4, 7, 8, 8);    $n = count($arr);     $x = 8;    echo "First Occurrence = ",          first($arr, 0, $n - 1, $x, $n), "\n";    echo "Last Occurrence = ",          last($arr, 0, $n - 1, $x, $n); // This code is contributed by anuj_67?>
<script> // JavaScript program to find first and last occurrences of// a number in a given sorted array  /* if x is present in arr then returns the index of   FIRST occurrence of x in arr[0..n-1], otherwise   returns -1 */ function first(arr,low,high,x,n){    if (high >= low) {        let mid = low + Math.floor((high - low) / 2);        if ((mid == 0 || x > arr[mid - 1]) && arr[mid] == x)            return mid;        else if (x > arr[mid])            return first(arr, (mid + 1), high, x, n);        else            return first(arr, low, (mid - 1), x, n);    }    return -1;} /* if x is present in arr then returns the index of   LAST occurrence of x in arr[0..n-1], otherwise   returns -1 */function last(arr, low, high, x, n){    if (high >= low) {        let mid = low + Math.floor((high - low) / 2);        if ((mid == n - 1 || x < arr[mid + 1]) && arr[mid] == x)            return mid;        else if (x < arr[mid])            return last(arr, low, (mid - 1), x, n);        else            return last(arr, (mid + 1), high, x, n);    }    return -1;} // Driver program     let arr = [ 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 ];    let n = arr.length;     let x = 8;    document.write("First Occurrence = " + first(arr, 0, n - 1, x, n),"</br>");    console.log("Last Occurrence = " + last(arr, 0, n - 1, x, n),"</br>"); // code is contributed by shinjanpatra </script>
First Occurrence = 8    
Last Occurrence = 9
 
Time Complexity : O(log n) Auxiliary Space : O(Log n) 
Iterative Implementation of Binary Search Solution : 
C++
C
Java
Python3
C#
Javascript
// C++ program to find first and last occurrences// of a number in a given sorted array#include <bits/stdc++.h>using namespace std; /* if x is present in arr[] then returns theindex of FIRST occurrence of x in arr[0..n-1],otherwise returns -1 */int first(int arr[], int x, int n){    int low = 0, high = n - 1, res = -1;    while (low <= high)    {                 // Normal Binary Search Logic        int mid = (low + high) / 2;                 if (arr[mid] > x)            high = mid - 1;        else if (arr[mid] < x)            low = mid + 1;         // If arr[mid] is same as x, we        // update res and move to the left        // half.        else        {            res = mid;            high = mid - 1;        }    }    return res;} /* If x is present in arr[] then returnsthe index of LAST occurrence of x inarr[0..n-1], otherwise returns -1 */int last(int arr[], int x, int n){    int low = 0, high = n - 1, res = -1;    while (low <= high)    {                 // Normal Binary Search Logic        int mid = (low + high) / 2;                 if (arr[mid] > x)            high = mid - 1;        else if (arr[mid] < x)            low = mid + 1;         // If arr[mid] is same as x, we        // update res and move to the right        // half.        else        {            res = mid;            low = mid + 1;        }    }    return res;} // Driver codeint main(){    int arr[] = { 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 };    int n = sizeof(arr) / sizeof(int);     int x = 8;    cout <<"First Occurrence = " << first(arr, x, n);    cout <<"\nLast Occurrence = "<< last(arr, x, n);     return 0;} // This code is contributed by shivanisinghss2110
// C program to find first and last occurrences of// a number in a given sorted array#include <stdio.h> /* if x is present in arr[] then returns the index ofFIRST occurrence of x in arr[0..n-1], otherwisereturns -1 */int first(int arr[], int x, int n){    int low = 0, high = n - 1, res = -1;    while (low <= high) {        // Normal Binary Search Logic        int mid = (low + high) / 2;        if (arr[mid] > x)            high = mid - 1;        else if (arr[mid] < x)            low = mid + 1;         // If arr[mid] is same as x, we        // update res and move to the left        // half.        else {            res = mid;            high = mid - 1;        }    }    return res;} /* if x is present in arr[] then returns the index ofLAST occurrence of x in arr[0..n-1], otherwisereturns -1 */int last(int arr[], int x, int n){    int low = 0, high = n - 1, res = -1;    while (low <= high) {        // Normal Binary Search Logic        int mid = (low + high) / 2;        if (arr[mid] > x)            high = mid - 1;        else if (arr[mid] < x)            low = mid + 1;         // If arr[mid] is same as x, we        // update res and move to the right        // half.        else {            res = mid;            low = mid + 1;        }    }    return res;} // Driver programint main(){    int arr[] = { 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 };    int n = sizeof(arr) / sizeof(int);     int x = 8;    printf("First Occurrence = %d\t",           first(arr, x, n));    printf("\nLast Occurrence = %d\n",           last(arr, x, n));     return 0;}
// Java program to find first// and last occurrences of a// number in a given sorted arrayimport java.util.*;class GFG{ // if x is present in arr[] then// returns the index of FIRST// occurrence of x in arr[0..n-1],// otherwise returns -1static int first(int arr[],                 int x, int n){  int low = 0, high = n - 1,      res = -1;  while (low <= high)  {    // Normal Binary Search Logic    int mid = (low + high) / 2;    if (arr[mid] > x)      high = mid - 1;    else if (arr[mid] < x)      low = mid + 1;     // If arr[mid] is same as    // x, we update res and    // move to the left half.    else    {      res = mid;      high = mid - 1;    }  }  return res;} // If x is present in arr[] then returns// the index of LAST occurrence of x in// arr[0..n-1], otherwise returns -1static int last(int arr[], int x, int n){  int low = 0, high = n - 1,      res = -1;  while (low <= high)  {    // Normal Binary Search Logic    int mid = (low + high) / 2;    if (arr[mid] > x)      high = mid - 1;    else if (arr[mid] < x)      low = mid + 1;     // If arr[mid] is same as x,    // we update res and move to    // the right half.    else    {      res = mid;      low = mid + 1;    }  }  return res;} // Driver programpublic static void main(String[] args){  int arr[] = {1, 2, 2, 2, 2,               3, 4, 7, 8, 8};  int n = arr.length;  int x = 8;  System.out.println("First Occurrence = " +                      first(arr, x, n));  System.out.println("Last Occurrence = " +                      last(arr, x, n));}} // This code is contributed by Chitranayal
# Python3 program to find first and# last occurrences of a number in a# given sorted array # If x is present in arr[] then# returns the index of FIRST# occurrence of x in arr[0..n-1],# otherwise returns -1def first(arr, x, n):         low = 0    high = n - 1    res = -1         while (low <= high):                 # Normal Binary Search Logic        mid = (low + high) // 2                 if arr[mid] > x:            high = mid - 1        else if arr[mid] < x:            low = mid + 1                     # If arr[mid] is same as x, we        # update res and move to the left        # half.        else:            res = mid            high = mid - 1     return res # If x is present in arr[] then returns# the index of FIRST occurrence of x in# arr[0..n-1], otherwise returns -1def last(arr, x, n):         low = 0    high = n - 1    res = -1         while(low <= high):                 # Normal Binary Search Logic        mid = (low + high) // 2                 if arr[mid] > x:            high = mid - 1        else if arr[mid] < x:            low = mid + 1                     # If arr[mid] is same as x, we        # update res and move to the Right        # half.        else:            res = mid            low = mid + 1     return res # Driver codearr = [ 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 ]n = len(arr)x = 8 print("First Occurrence =", first(arr, x, n))print("Last Occurrence =", last(arr, x, n)) # This code is contributed by Ediga_Manisha.
// C# program to find first// and last occurrences of a// number in a given sorted arrayusing System;class GFG{ // if x is present in []arr then// returns the index of FIRST// occurrence of x in arr[0..n-1],// otherwise returns -1static int first(int []arr,                 int x, int n){  int low = 0, high = n - 1,      res = -1;  while (low <= high)  {    // Normal Binary Search Logic    int mid = (low + high) / 2;    if (arr[mid] > x)      high = mid - 1;    else if (arr[mid] < x)      low = mid + 1;     // If arr[mid] is same as    // x, we update res and    // move to the left half.    else    {      res = mid;      high = mid - 1;    }  }  return res;} // If x is present in []arr then returns// the index of LAST occurrence of x in// arr[0..n-1], otherwise returns -1static int last(int []arr, int x, int n){  int low = 0, high = n - 1,      res = -1;  while (low <= high)  {    // Normal Binary Search Logic    int mid = (low + high) / 2;    if (arr[mid] > x)      high = mid - 1;    else if (arr[mid] < x)      low = mid + 1;     // If arr[mid] is same as x,    // we update res and move to    // the right half.    else    {      res = mid;      low = mid + 1;    }  }  return res;} // Driver programpublic static void Main(String[] args){  int []arr = {1, 2, 2, 2, 2,               3, 4, 7, 8, 8};  int n = arr.Length;  int x = 8;  Console.WriteLine("First Occurrence = " +                      first(arr, x, n));  Console.WriteLine("Last Occurrence = " +                      last(arr, x, n));}} // This code is contributed by 29AjayKumar
<script> // JavaScript program to find first and last occurrences// of a number in a given sorted array /* if x is present in arr[] then returns theindex of FIRST occurrence of x in arr[0..n-1],otherwise returns -1 */ function first(arr, x, n){    let low = 0, high = n - 1, res = -1;    while (low <= high)    {                 // Normal Binary Search Logic        let mid = Math.floor((low + high) / 2);                 if (arr[mid] > x)            high = mid - 1;        else if (arr[mid] < x)            low = mid + 1;         // If arr[mid] is same as x, we        // update res and move to the left        // half.        else        {            res = mid;            high = mid - 1;        }    }    return res;} /* If x is present in arr[] then returnsthe index of LAST occurrence of x inarr[0..n-1], otherwise returns -1 */function last(arr, x, n){    let low = 0, high = n - 1, res = -1;    while (low <= high)    {                 // Normal Binary Search Logic        let mid = Math.floor((low + high) / 2);                 if (arr[mid] > x)            high = mid - 1;        else if (arr[mid] < x)            low = mid + 1;         // If arr[mid] is same as x, we        // update res and move to the right        // half.        else        {            res = mid;            low = mid + 1;        }    }    return res;} // Driver code     let arr = [ 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 ];    let n = arr.length;     let x = 8;    document.write("First Occurrence = " + first(arr, x, n),"</br>");    document.write("Last Occurrence = " + last(arr, x, n));  // This code is contributed by shinjanpatra </script>
First Occurrence = 8    
Last Occurrence = 9
 
Time Complexity : O(log n) Auxiliary Space : O(1) 
Using ArrayList
Add all the elements of the array to ArrayList and using indexOf() and lastIndexOf() method we will find the first position and the last position of the element in the array.
Java
// Java program for the above approachimport java.util.ArrayList;public class GFG {    public static int first(ArrayList list, int x)    {        // return first occurrence index        // of element x in ArrayList        // using method indexOf()        return list.indexOf(x);    }    public static int last(ArrayList list, int x)    {        // return last occurrence index        // of element x in ArrayList        // using method lastIndexOf()        return list.lastIndexOf(x);    }    public static void main(String[] args)    {        int arr[] = { 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 };        ArrayList<Integer> clist = new ArrayList<>();         // adding elements of array to ArrayList        for (int i : arr)            clist.add(i);        int x = 8;         // displaying the first occurrence        System.out.println("First Occurrence = "                           + first(clist, x));         // displaying the last occurrence        System.out.println("Last Occurrence = "                           + last(clist, x));    }}
Output:
First Occurrence = 8
Last Occurrence = 9
 Another approach using c++ STL functions lower and upper bound
C++
#include <bits/stdc++.h>using namespace std; void findFirstAndLast(int arr[], int n, int x){    int first, last;    // to store first occurrence    first = lower_bound(arr, arr + n, x) - arr;    // to store last occurrence    last = upper_bound(arr, arr + n, x) - arr - 1;     if (first == n) {        first = -1;        last = -1;    }    cout << "First Occurrence = " << first         << "\nLast Occurrence = " << last;} // Driver codeint main(){    int arr[] = { 1, 2, 2, 2, 2, 3, 4, 7, 8, 8 };    int n = sizeof(arr) / sizeof(int);    int x = 8;    findFirstAndLast(arr, n, x);    return 0;}
First Occurrence = 8
Last Occurrence = 9
Time Complexity : O(log n)
 Auxiliary Space : O(1) 
Extended Problem : Count number of occurrences in a sorted arrayThis article is contributed by DANISH_RAZA. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
nitin mittal
vt_m
harshitSingh_11
manishaediga23
ukasp
29AjayKumar
le0
prathamverma42
avanitrachhadiya2155
anushikasethh
sumitgumber28
shivanisinghss2110
sagar0719kumar
gjain2299
ruhelaa48
shinjanpatra
surinderdawra388
Amazon
Binary Search
Arrays
Amazon
Arrays
Binary Search
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Stack Data Structure (Introduction and Program)
Maximum and minimum of an array using minimum number of comparisons
Top 50 Array Coding Problems for Interviews
Multidimensional Arrays in Java
Introduction to Arrays
Linear Search
Python | Using 2D arrays/lists the right way
Linked List vs Array
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Queue | Set 1 (Introduction and Array Implementation)