diff --git a/src/main/java/com/thealgorithms/misc/MedianOfMatrix.java b/src/main/java/com/thealgorithms/misc/MedianOfMatrix.java new file mode 100644 index 000000000..4d8b980f2 --- /dev/null +++ b/src/main/java/com/thealgorithms/misc/MedianOfMatrix.java @@ -0,0 +1,30 @@ +package com.thealgorithms.misc; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Median of Matrix (https://medium.com/@vaibhav.yadav8101/median-in-a-row-wise-sorted-matrix-901737f3e116) + * Author: Bama Charan Chhandogi (https://github.com/BamaCharanChhandogi) + */ + +public final class MedianOfMatrix { + + public static int median(List> matrix) { + // Flatten the matrix into a 1D list + List linear = new ArrayList<>(); + for (List row : matrix) { + linear.addAll(row); + } + + // Sort the 1D list + Collections.sort(linear); + + // Calculate the middle index + int mid = (0 + linear.size() - 1) / 2; + + // Return the median + return linear.get(mid); + } +} diff --git a/src/test/java/com/thealgorithms/misc/MedianOfMatrixtest.java b/src/test/java/com/thealgorithms/misc/MedianOfMatrixtest.java new file mode 100644 index 000000000..c1fa30d6a --- /dev/null +++ b/src/test/java/com/thealgorithms/misc/MedianOfMatrixtest.java @@ -0,0 +1,34 @@ +package com.thealgorithms.misc; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Test; + +public class MedianOfMatrixtest { + + @Test + public void testMedianWithOddNumberOfElements() { + List> matrix = new ArrayList<>(); + matrix.add(Arrays.asList(1, 3, 5)); + matrix.add(Arrays.asList(2, 4, 6)); + matrix.add(Arrays.asList(7, 8, 9)); + + int result = MedianOfMatrix.median(matrix); + + assertEquals(5, result); + } + + @Test + public void testMedianWithEvenNumberOfElements() { + List> matrix = new ArrayList<>(); + matrix.add(Arrays.asList(2, 4)); + matrix.add(Arrays.asList(1, 3)); + + int result = MedianOfMatrix.median(matrix); + + assertEquals(2, result); + } +}