Return Nth Smallest Element in Java


The challenge

Given an array/list [] of integers, Find the Nth smallest element in this array of integers

Notes

  • Array/list size is at least 3 .
  • Array/list’s numbers could be a mixture of positives , negatives and zeros .
  • Repetition in array/list’s numbers could occur, so don’t Remove Duplications .

Examples

nthSmallest({3,1,2} ,2) ==> return (2) 
nthSmallest({15,20,7,10,4,3} ,3) ==> return (7) 
nthSmallest({2,169,13,-5,0,-1} ,4) ==> return (2) 

The solution in Java code

Option 1:

public class Solution {
    public static int nthSmallest(final int[] arr, final int n) {
        java.util.Arrays.sort(arr);
        for(int i=0; i<arr.length; i++) {
            if (i==n-1) return arr[i];
        }
        return 0;
    }
}

Option 2:

import java.util.Arrays;
public class Solution {
    public static int nthSmallest(final int[] arr, final int n) {
        Arrays.sort(arr);
        return arr[n - 1];
    }
}

Option 3:

import java.util.Arrays;

public class Solution {
    public static int nthSmallest(final int[] arr, final int n) {
        return Arrays.stream(arr).sorted().skip(n-1).findFirst().getAsInt();
    }
}

Test cases to validate our solution

import org.junit.Test;
import static org.junit.Assert.assertEquals;
import org.junit.runners.JUnit4;

public class SampleTest {
    @Test
    public void checkPositiveValues() {
        doTest(new int[]{3, 1, 2}, 2, 2);
        doTest(new int[]{15, 20, 7, 10, 4, 3}, 3, 7);
    }
    @Test
    public void checkNegativeValues() {
        doTest(new int[]{-5, -1, -6, -18}, 4, -1);
        doTest(new int[]{-102, -16, -1, -2, -367, -9}, 5, -2);
    }
    @Test
    public void checkMixedValues() {
        doTest(new int[]{2, 169, 13, -5, 0, -1}, 4, 2);
        doTest(new int[]{177, 225, 243, -169, -12, -5, 2, 92}, 5, 92);
    }
    private void doTest(final int[] arr, final int n, final int expected) {
        assertEquals(expected, Solution.nthSmallest(arr, n));
    }
}