Software Engineering

# How to Solve Max-Min Arrays in Java

## The challenge#

You are given an array of unique elements, and your task is to rearrange the values so that the first max value is followed by the first minimum, followed by second max value then second min value, etc.

For example:

``````solve([15,11,10,7,12]) = [15,7,12,10,11]
``````

The first max is `15` and the first min is `7`. The second max is `12` and the second min is `10` and so on.

## The solution in Java code#

Option 1:

``````import java.util.*;

class Solution{
public static int[] solve (int[] arr){
Arrays.sort(arr);
int[] solutionArray = new int[arr.length];

for(int i = 0; i < arr.length; i++){
solutionArray[i] = i % 2 == 0 ? arr[arr.length - i/2 - 1] : arr[i/2];
}
return solutionArray;
}
}
``````

Option 2:

``````import java.util.*;

class Solution{
public static int[] solve (int[] arr){
List<Integer> temp = new ArrayList<Integer>();
Arrays.sort(arr);
for (int i = 0, j = arr.length - 1; i <= j; ++i, --j) {
}
return temp.stream().mapToInt(i -> i).toArray();
}
}
``````

Option 3:

``````import java.util.stream.IntStream;

class Solution {

public static int[] solve(int[] arr) {
int[] sorted = IntStream.of(arr).sorted().toArray();
int[] result = new int[arr.length];
for (int i = 0, j = arr.length - 1, f = -1; i < arr.length;) {
result[i] = sorted[j];
j = (j + arr.length + (f *= -1) * (++i)) % arr.length;
}
return result;
}

}
``````

## Test cases to validate our solution#

``````import org.junit.Test;
import static org.junit.Assert.assertArrayEquals;
import org.junit.runners.JUnit4;

public class SolutionTest{
@Test
public void basicTests(){
assertArrayEquals(new int[]{15,7,12,10,11},Solution.solve(new int[]{15,11,10,7,12}));
assertArrayEquals(new int[]{15,7,12,10,11},Solution.solve(new int[]{15,11,10,7,12}));
assertArrayEquals(new int[]{15,7,12,10,11},Solution.solve(new int[]{15,11,10,7,12}));
}
}
``````