Java Program to Find Local Minima in An Array

In this section, we will discuss what is local minima in an array and how to find local minima through a Java program.

What is local minima in an array?

An element is said to be local minima of an array if the array element is less than both of its neighbor (if exist) elements. For the first and the last elements of an array, consider only one neighbor element for comparison. Note that there may exists more than one local minima in an array but our target is to find one of them.

Consider the following examples.

Input: arr[] = {17, 12, 6, 18, 9, 2, 1};

Output: Element at index 2 is local minima.

The element 3 is local minima for the above array because it is less than both of its neighbors. In the above array, we observe that there is more than one local minima that are 5 and 4.

Input: arr[] = {45, 7, 20, 2, 3};

Output: Element at index 1 is local minima.

For the above array, the local minima is 7 because it is less than both of its elements (right and left).

Input: arr[] = {6, 7, 8};

Output: Element at index 0 is local minima.

For the above array, the local minima is 6 because it is less than its right neighbor element.

Input: arr[] = {7, 5, 3};

Output: Element at index 2 is local minima.

Index of local minima is 2.

For the above array, the local minima is 3 because it is less than its right element and there is no right element.

Solution

There are the following two approaches:

  • Naive Approach
  • Efficient Approach

Naive Approach

In this approach, we perform the linear scan over the array as soon as we find the local minima, return the same. In general, use a for loop and compare each element with its neighbor elements. The complexity of this approach is O(n).

Efficient Approach

The approach is based on the binary search. In this approach, we compare the middle element with its neighbors.

  • If the middle element of the array is less than its neighbor elements, then we return the middle element as local minima.
  • If the middle element of the array is greater than its left neighbor elements, then there exists a local minima in the left half of the array.
  • If the middle element of the array is greater than its right neighbor element, then there exist a local minima in the right half of the array.

The complexity for the above approach is O(log n).

Let's implement the above approach in a Java program.

LocalMinimaExample.java

Output:

Local Minima of the given array is: 3