Table of Contents
If you want to practice data structure and algorithm programs, you can go through Java coding interview questions.
In this post, we will see how to find the local minima in the array.
Problem
An element is local minima if it is less than its neighbors.
Output: 2
int []arr = {11,12,13,14};
Output: 11
int []arr = {10};
Output: 10
int []arr = {8,6};
Output: 6
Solution
Naive approach
You can use for loop and compare neighbor elements, you will get the local minima.
Worst case time complexity will be o(n)
.
Efficient approach
You can use binary search to find local minima.
Worst case time complexity will be o(log n)
.
Here is simple algorithm
- Find the
mid
element - If
mid
element isless
than both the neighbor then return it. - If
mid
element isgreater
than its left neighbor, then go left - else go right.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
package org.arpit.java2blog; public class LocalMinima { public int findLocalMinima(int [] arr, int start, int end){ /*find the mid index*/ int mid = start + (end-start)/2; int size = arr.length; /*check the local minima *first check if left and right neighbor exists */ if((mid==0 || arr[mid-1]>arr[mid]) && (mid==size-1 || arr[mid+1]>arr[mid])) return arr[mid]; /* check if left neighbor is less than mid element, if yes go left */ else if(mid>0 && arr[mid]>arr[mid-1]){ return findLocalMinima(arr, start, mid); } else { /*check if right neighbor is greater than mid element, if yes go right */ return findLocalMinima(arr, mid+1, end); } } public static void main(String[] args) { LocalMinima l = new LocalMinima(); int [] arr = {10, 5, 3, 6, 13, 16, 7}; System.out.println("Local Minima is: " + l.findLocalMinima(arr,0,arr.length)); } } |
When you run above program, you will get below output.
That’s all about how to find the local minima in a array