// Efficient Code (Iterative) import java.util.*; import java.io.*; class GFG { static int firstOcc(int arr[], int n, int x) { int low = 0, high = n - 1; while(low <= high) { int mid = (low + high) / 2; if(x > arr[mid]) low = mid + 1; else if(x < arr[mid]) high = mid - 1; else { if(mid == 0 || arr[mid - 1] != arr[mid]) return mid; else high = mid - 1; } } return -1; } public static void main(String args[]) { int arr[] = {5, 10, 10, 10, 20}, n = 5; int x = 10; System.out.println(firstOcc(arr, n, x)); // OUTPUT : 1 } } // Efficient Code (Recursive) import java.util.*; import java.io.*; class GFG { static int firstOcc(int arr[], int low, int high, int x) { if(low > high) return -1; int mid = (low + high) / 2; if(x > arr[mid]) return firstOcc(arr, mid + 1, high, x); else if(x < arr[mid]) return firstOcc(arr, low, mid - 1, x); else { if(mid == 0 || arr[mid - 1] != arr[mid]) return mid; else return firstOcc(arr, low, mid - 1, x); } } public static void main(String args[]) { int arr[] = {5, 10, 10, 15, 20, 20, 20}, n = 7; int x = 20; System.out.println(firstOcc(arr, 0, n - 1, x)); // OUTPUT : 4 } } // Naive Code import java.util.*; import java.io.*; class GFG { static int firstOccurrence(int arr[], int n, int x) { for(int i = 0; i < n; i++) if(arr[i] == x) return i; return -1; } public static void main(String args[]) { int arr[] = {5, 10, 10, 15, 15}, n = 5; int x = 15; System.out.println(firstOccurrence(arr, n, x)); // OUTPUT : 3 } }