Index of last occurrence GFG

 package com.company;


public class LastIndex {
// Index of last occurrence
// 1. Naive solution
public static int index(int[] arr, int x) {
int n = arr.length;
for(int i = n - 1; i >= 0; i--) {
if(arr[i] == x) {
return i;
}
}
return -1;
}

// 2. Efficient iterative solution
public static int lastIndex(int[] arr, int x) {
int n = arr.length;
int low = 0; int high = n - 1;
while(low <= high) {
int mid = (low + high) / 2;
if(arr[mid] == x) {
if(mid == n - 1 || arr[mid + 1 ] != x) {
return mid;
}
else
low = mid + 1;
}

else if(arr[mid] > x) {
high =mid - 1;
}
else
low = mid + 1;
}
return -1;
}

// 3. Recursive approach
public static int indexOfLastOccurrence(int[] arr, int x, int low, int high) {
int n = arr.length;
if(low > high){
return -1;
}
int mid = (low + high) / 2;

if(arr[mid] == x){
if(mid == n - 1 || arr[mid + 1] != arr[mid]) {
return mid;
}
else
return indexOfLastOccurrence(arr, x, mid + 1, high);
}

else if(arr[mid] > x) {
return indexOfLastOccurrence(arr, x, low, mid - 1);
}

else
return indexOfLastOccurrence(arr, x, mid + 1, high);

}
public static void main(String[] args) {
int[] array = {1,2,2,2,2,4,4,5,5,6};
System.out.println(indexOfLastOccurrence(array, 22, 0, 9));
}
}

Comments