Table of contents
1.
Introduction
2.
Recursive Solution
2.1.
C++
2.2.
Java
2.3.
Python
2.4.
PHP
2.5.
JS
3.
Brute Force Approach Using Single Loop: Increment by 1
3.1.
C++
3.2.
Java
3.3.
Python
3.4.
JS
3.5.
PHP
4.
Efficient Approach Using Single Loop: Increment by 2
4.1.
C++
4.2.
Java
4.3.
Python
4.4.
JS
4.5.
PHP
5.
Frequently Asked Questions
5.1.
Which approach is the most efficient?
5.2.
When should we use the recursive method?
5.3.
Can we use sorting to find min and max?
6.
Conclusion
Last Updated: Mar 25, 2025
Easy

Find Minimum and Maximum Element in an Array

Career growth poll
Do you think IIT Guwahati certified course can help you in your career?

Introduction

Finding the minimum and maximum elements in an array is a common problem in programming. It helps in various applications like searching, sorting, and optimizing algorithms. 

Find Minimum and Maximum Element in an Array

 

In this article, we will discuss different approaches to solving this problem with examples in multiple programming languages: C++, Python, Java, C#, JavaScript, and PHP.

Recursive Solution

A recursive approach involves dividing the array into smaller parts and finding the minimum and maximum separately before combining the results.

Instead of using loops, we use recursion to divide the problem into smaller subproblems. The function recursively finds the minimum and maximum values in subarrays and then combines the results.

  • C++
  • Java
  • Python
  • PHP
  • JS

C++

#include <iostream>
#include <climits>
using namespace std;
void findMinMaxRecursive(int arr[], int left, int right, int &minVal, int &maxVal) {
if (left == right) {
minVal = maxVal = arr[left];
return;
}
if (right - left == 1) {
minVal = min(arr[left], arr[right]);
maxVal = max(arr[left], arr[right]);
return;
}
int mid = (left + right) / 2;
int minLeft, maxLeft, minRight, maxRight;
findMinMaxRecursive(arr, left, mid, minLeft, maxLeft);
findMinMaxRecursive(arr, mid + 1, right, minRight, maxRight);
minVal = min(minLeft, minRight);
maxVal = max(maxLeft, maxRight);
}
int main() {
int arr[] = {3, 5, 1, 9, 2, 8};
int size = sizeof(arr) / sizeof(arr[0]);
int minVal = INT_MAX, maxVal = INT_MIN;
findMinMaxRecursive(arr, 0, size - 1, minVal, maxVal);
cout << "Min: " << minVal << ", Max: " << maxVal << endl;
return 0;
}
You can also try this code with Online C++ Compiler
Run Code

Java

public class MinMaxRecursive {
static int[] findMinMaxRecursive(int[] arr, int left, int right) {
if (left == right)
return new int[]{arr[left], arr[left]};

if (right - left == 1)
return new int[]{Math.min(arr[left], arr[right]), Math.max(arr[left], arr[right])};


int mid = (left + right) / 2;
int[] leftPair = findMinMaxRecursive(arr, left, mid);
int[] rightPair = findMinMaxRecursive(arr, mid + 1, right);

return new int[]{Math.min(leftPair[0], rightPair[0]), Math.max(leftPair[1], rightPair[1])};
}
public static void main(String[] args) {
int[] arr = {3, 5, 1, 9, 2, 8};
int[] result = findMinMaxRecursive(arr, 0, arr.length - 1);
System.out.println("Min: " + result[0] + ", Max: " + result[1]);
}
}
You can also try this code with Online Java Compiler
Run Code

Python

def find_min_max_recursive(arr, left, right):
if left == right:
return arr[left], arr[left]
if right - left == 1:
return min(arr[left], arr[right]), max(arr[left], arr[right])

mid = (left + right) // 2
min_left, max_left = find_min_max_recursive(arr, left, mid)
min_right, max_right = find_min_max_recursive(arr, mid + 1, right)

return min(min_left, min_right), max(max_left, max_right)


arr = [3, 5, 1, 9, 2, 8]
min_val, max_val = find_min_max_recursive(arr, 0, len(arr) - 1)
print("Min:", min_val, "Max:", max_val)
You can also try this code with Online Python Compiler
Run Code

PHP

function findMinMaxRecursive($arr, $left, $right) {
if ($left == $right)
return [$arr[$left], $arr[$left]];

if ($right - $left == 1)
return [min($arr[$left], $arr[$right]), max($arr[$left], $arr[$right])];


$mid = intval(($left + $right) / 2);
list($minLeft, $maxLeft) = findMinMaxRecursive($arr, $left, $mid);
list($minRight, $maxRight) = findMinMaxRecursive($arr, $mid + 1, $right);

return [min($minLeft, $minRight), max($maxLeft, $maxRight)];
}


$arr = [3, 5, 1, 9, 2, 8];
list($minVal, $maxVal) = findMinMaxRecursive($arr, 0, count($arr) - 1);
echo "Min: $minVal, Max: $maxVal";
You can also try this code with Online PHP Compiler
Run Code

JS

function findMinMaxRecursive(arr, left, right) {
if (left === right)
return [arr[left], arr[left]];

if (right - left === 1)
return [Math.min(arr[left], arr[right]), Math.max(arr[left], arr[right])];

let mid = Math.floor((left + right) / 2);
let [minLeft, maxLeft] = findMinMaxRecursive(arr, left, mid);
let [minRight, maxRight] = findMinMaxRecursive(arr, mid + 1, right);

return [Math.min(minLeft, minRight), Math.max(maxLeft, maxRight)];
}

let arr = [3, 5, 1, 9, 2, 8];
let [minVal, maxVal] = findMinMaxRecursive(arr, 0, arr.length - 1);
console.log(`Min: ${minVal}, Max: ${maxVal}`);
You can also try this code with Online Javascript Compiler
Run Code

Time and Space Complexity

  • Time Complexity:
    • O(n) (Each element is processed once, but using recursion).
       
  • Space Complexity:
    • O(log n) (Recursive stack depth).

Brute Force Approach Using Single Loop: Increment by 1

This approach iterates through the array once and keeps track of the minimum and maximum values. It is a simple and effective solution for finding min and max in an array. Works well for small to medium datasets, but for large datasets, an optimized approach may be preferred.

  • C++
  • Java
  • Python
  • JS
  • PHP

C++

#include <iostream>
using namespace std;

void findMinMax(int arr[], int size) {
int minVal = arr[0], maxVal = arr[0];

for (int i = 1; i < size; i++) {
if (arr[i] < minVal) minVal = arr[i];
if (arr[i] > maxVal) maxVal = arr[i];
}

cout << "Min: " << minVal << " Max: " << maxVal << endl;
}

int main() {
int arr[] = {3, 5, 1, 9, 2};
int size = sizeof(arr) / sizeof(arr[0]);
findMinMax(arr, size);
return 0;
}
You can also try this code with Online C++ Compiler
Run Code

Java

public class MinMaxBruteForce {
public static void findMinMax(int[] arr) {
int minVal = arr[0], maxVal = arr[0];

for (int num : arr) {
if (num < minVal) minVal = num;
if (num > maxVal) maxVal = num;
}

System.out.println("Min: " + minVal + " Max: " + maxVal);
}

public static void main(String[] args) {
int[] arr = {3, 5, 1, 9, 2};
findMinMax(arr);
}
}
You can also try this code with Online Java Compiler
Run Code

Python

def find_min_max(arr):
min_val, max_val = arr[0], arr[0]

for num in arr:
if num < min_val:
min_val = num
if num > max_val:
max_val = num

print("Min:", min_val, "Max:", max_val)

arr = [3, 5, 1, 9, 2]
find_min_max(arr)
You can also try this code with Online Python Compiler
Run Code

JS

function findMinMax(arr) {
let minVal = arr[0], maxVal = arr[0];

for (let i = 1; i < arr.length; i++) {
if (arr[i] < minVal) minVal = arr[i];
if (arr[i] > maxVal) maxVal = arr[i];
}

console.log(`Min: ${minVal} Max: ${maxVal}`);
}

// Example usage
const arr = [3, 5, 1, 9, 2];
findMinMax(arr);
You can also try this code with Online Javascript Compiler
Run Code

PHP

function findMinMax($arr) {
$minVal = $arr[0];
$maxVal = $arr[0];

foreach ($arr as $num) {
if ($num < $minVal) $minVal = $num;
if ($num > $maxVal) $maxVal = $num;
}

echo "Min: " . $minVal . " Max: " . $maxVal;
}

$arr = [3, 5, 1, 9, 2];
findMinMax($arr);
You can also try this code with Online PHP Compiler
Run Code

 

  • Time complexity- O(n)
     
  • Space Complexity- O(1)

Efficient Approach Using Single Loop: Increment by 2

This efficient approach reduces the number of comparisons by processing two elements at a time. This method is faster than the single-loop brute-force approach as it performs fewer comparisons.

  • C++
  • Java
  • Python
  • JS
  • PHP

C++

#include <iostream>
using namespace std;
void findMinMax(int arr[], int size) {
int minVal, maxVal, i;


if (size % 2 == 0) {
minVal = min(arr[0], arr[1]);
maxVal = max(arr[0], arr[1]);
i = 2;
} else {
minVal = maxVal = arr[0];
i = 1;
}


while (i < size - 1) {
if (arr[i] < arr[i + 1]) {
minVal = min(minVal, arr[i]);
maxVal = max(maxVal, arr[i + 1]);
} else {
minVal = min(minVal, arr[i + 1]);
maxVal = max(maxVal, arr[i]);
}
i += 2;
}


cout << "Min: " << minVal << " Max: " << maxVal << endl;
}


int main() {
int arr[] = {3, 5, 1, 9, 2};
int size = sizeof(arr) / sizeof(arr[0]);
findMinMax(arr, size);
return 0;
}
You can also try this code with Online C++ Compiler
Run Code

Java

def find_min_max(arr):
if len(arr) % 2 == 0:
min_val, max_val = min(arr[0], arr[1]), max(arr[0], arr[1])
i = 2
else:
min_val = max_val = arr[0]
i = 1


while i < len(arr) - 1:
if arr[i] < arr[i + 1]:
min_val = min(min_val, arr[i])
max_val = max(max_val, arr[i + 1])
else:
min_val = min(min_val, arr[i + 1])
max_val = max(max_val, arr[i])
i += 2


print("Min:", min_val, "Max:", max_val)


arr = [3, 5, 1, 9, 2]
find_min_max(arr)
You can also try this code with Online Java Compiler
Run Code

Python

public class MinMaxEfficient {
public static void findMinMax(int[] arr) {
int minVal, maxVal, i;

if (arr.length % 2 == 0) {
minVal = Math.min(arr[0], arr[1]);
maxVal = Math.max(arr[0], arr[1]);
i = 2;
} else {
minVal = maxVal = arr[0];
i = 1;
}


while (i < arr.length - 1) {
if (arr[i] < arr[i + 1]) {
minVal = Math.min(minVal, arr[i]);
maxVal = Math.max(maxVal, arr[i + 1]);
} else {
minVal = Math.min(minVal, arr[i + 1]);
maxVal = Math.max(maxVal, arr[i]);
}
i += 2;
}


System.out.println("Min: " + minVal + " Max: " + maxVal);
}


public static void main(String[] args) {
int[] arr = {3, 5, 1, 9, 2};
findMinMax(arr);
}
}
You can also try this code with Online Python Compiler
Run Code

JS

function findMinMax(arr) {
let minVal, maxVal, i;

if (arr.length % 2 === 0) {
minVal = Math.min(arr[0], arr[1]);
maxVal = Math.max(arr[0], arr[1]);
i = 2;
} else {
minVal = maxVal = arr[0];
i = 1;
}

while (i < arr.length - 1) {
if (arr[i] < arr[i + 1]) {
minVal = Math.min(minVal, arr[i]);
maxVal = Math.max(maxVal, arr[i + 1]);
} else {
minVal = Math.min(minVal, arr[i + 1]);
maxVal = Math.max(maxVal, arr[i]);
}
i += 2;
}

console.log(`Min: ${minVal} Max: ${maxVal}`);
}

// Example usage
const arr = [3, 5, 1, 9, 2];
findMinMax(arr);
You can also try this code with Online Javascript Compiler
Run Code

PHP

function findMinMax($arr) {
$size = count($arr);
if ($size % 2 == 0) {
$minVal = min($arr[0], $arr[1]);
$maxVal = max($arr[0], $arr[1]);
$i = 2;
} else {
$minVal = $maxVal = $arr[0];
$i = 1;
}


while ($i < $size - 1) {
if ($arr[$i] < $arr[$i + 1]) {
$minVal = min($minVal, $arr[$i]);
$maxVal = max($maxVal, $arr[$i + 1]);
} else {
$minVal = min($minVal, $arr[$i + 1]);
$maxVal = max($maxVal, $arr[$i]);
}
$i += 2;
}


echo "Min: " . $minVal . " Max: " . $maxVal;
}


$arr = [3, 5, 1, 9, 2];
findMinMax($arr);
You can also try this code with Online PHP Compiler
Run Code


Time ComplexityO(n) (since we still go through the array once).

Space ComplexityO(1) (since only a few extra variables are used).

Frequently Asked Questions

Which approach is the most efficient?

The efficient approach using a single loop with an increment of 2 reduces the number of comparisons, making it the best choice for large datasets.

When should we use the recursive method?

The recursive approach is useful when solving problems using divide and conquer but might not be optimal for large arrays due to stack memory limitations.

Can we use sorting to find min and max?

Yes, sorting the array allows us to get min and max from the first and last elements, but sorting is expensive (O(n log n)) compared to direct approaches (O(n)).

Conclusion

In this article, we discussed different ways to find the minimum and maximum elements in an array using recursion, built-in functions, brute force, and optimized approaches. Each method has its advantages, depending on the problem requirements and constraints.

Live masterclass