The challenge
Make two functions, max
and min
that take a(n) array/vector of integers list
as input and outputs, respectively, the largest and lowest number in that array/vector.
Examples
max({4,6,2,1,9,63,-134,566}) returns 566
min({-52, 56, 30, 29, -54, 0, -110}) returns -110
max({5}) returns 5
min({42, 54, 65, 87, 0}) returns 0
Additionally
- You may consider that there will not be any empty arrays/vectors.
The solution in Java code
Option 1:
public class Solution {
public int min(int[] list) {
java.util.Arrays.sort(list);
return list[0];
}
public int max(int[] list) {
java.util.Arrays.sort(list);
return list[list.length-1];
}
}
Option 2:
import java.util.Arrays;
public class Solution {
public int min(int[] list) {
return Arrays.stream(list).min().getAsInt();
}
public int max(int[] list) {
return Arrays.stream(list).max().getAsInt();
}
}
Option 3:
public class Solution {
public int min(int[] list) {
int min = list[0];
for (int number : list) {
if (number < min) {
min = number;
}
}
return min;
}
public int max(int[] list) {
int max = list[0];
for (int number : list) {
if (number > max) {
max = number;
}
}
return max;
}
}
Test cases to validate our solution
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;
public class SolutionTest {
private Solution solution = new Solution();
private Random rand = new Random();
@Test
public void fixedMin()
{
assertEquals(-110, solution.min(new int[]{-52, 56, 30, 29, -54, 0, -110}));
assertEquals(0, solution.min(new int[]{42, 54, 65, 87, 0}));
assertEquals(1, solution.min(new int[]{1, 2, 3, 4, 5, 10}));
assertEquals(-10, solution.min(new int[]{-1, -2, -3, -4, -5, -10}));
}
@Test
public void fixedMax()
{
assertEquals(56, solution.max(new int[]{-52, 56, 30, 29, -54, 0, -110}));
assertEquals(566, solution.max(new int[]{4,6,2,1,9,63,-134,566}));
assertEquals(5, solution.max(new int[]{5}));
assertEquals(555, solution.max(new int[]{534,43,2,1,3,4,5,5,443,443,555,555}));
}
@Test
public void randomTests()
{
for(int i = 0; i < 10; i++)
{
int randLng = 2 + (rand.nextInt(14) % 15);
List<Integer> randList = new ArrayList<>();
for(int l = 0; l < randLng; l++)
{
randList.add(rand.nextInt());
}
assertEquals(Long.valueOf(Collections.min(randList)),
Long.valueOf(solution.min(randList.stream().mapToInt(e -> e).toArray())));
assertEquals(Long.valueOf(Collections.max(randList)),
Long.valueOf(solution.max(randList.stream().mapToInt(e -> e).toArray())));
}
}
}