From fffa253af412fde702e9ec435db9601a8e0887c5 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Thu, 3 Oct 2024 20:10:03 +0530 Subject: [PATCH 01/15] Add `MedianOfTwoSortedArrays.java` new algorithm --- .../MedianOfTwoSortedArrays.java | 50 +++++++++++++++++++ .../MedianOfTwoSortedArraysTest.java | 32 ++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java create mode 100644 src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java diff --git a/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java b/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java new file mode 100644 index 000000000000..37cfe20b754f --- /dev/null +++ b/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java @@ -0,0 +1,50 @@ +package com.thealgorithms.divideandconquer; + +public class MedianOfTwoSortedArrays { + + /** + * Finds the median of two sorted arrays in logarithmic time. + * + * @param nums1 the first sorted array + * @param nums2 the second sorted array + * @return the median of the combined sorted array + * @throws IllegalArgumentException if the input arrays are not sorted + */ + public static double findMedianSortedArrays(int[] nums1, int[] nums2) { + if (nums1.length > nums2.length) { + return findMedianSortedArrays(nums2, nums1); // Ensure nums1 is the smaller array + } + + int m = nums1.length; + int n = nums2.length; + int low = 0; + int high = m; + while (low <= high) { + int partition1 = (low + high) / 2; // Partition in the first array + int partition2 = (m + n + 1) / 2 - partition1; // Partition in the second array + + int maxLeft1 = (partition1 == 0) ? Integer.MIN_VALUE : nums1[partition1 - 1]; + int minRight1 = (partition1 == m) ? Integer.MAX_VALUE : nums1[partition1]; + int maxLeft2 = (partition2 == 0) ? Integer.MIN_VALUE : nums2[partition2 - 1]; + int minRight2 = (partition2 == n) ? Integer.MAX_VALUE : nums2[partition2]; + + // Check if partition is valid + if (maxLeft1 <= minRight2 && maxLeft2 <= minRight1) { + // If combined array length is odd + if ((m + n) % 2 == 1) { + return Math.max(maxLeft1, maxLeft2); + } + // If combined array length is even + else { + return (Math.max(maxLeft1, maxLeft2) + Math.min(minRight1, minRight2)) / 2.0; + } + } else if (maxLeft1 > minRight2) { + high = partition1 - 1; + } else { + low = partition1 + 1; + } + } + + throw new IllegalArgumentException("Input arrays are not sorted"); + } +} diff --git a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java new file mode 100644 index 000000000000..e47ad7038545 --- /dev/null +++ b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java @@ -0,0 +1,32 @@ +package com.thealgorithms.divideandconquer; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class MedianOfTwoSortedArraysTest { + + @Test + void testFindMedianSortedArrays() { + // Test case 1: Arrays of equal length + assertEquals(2.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{1, 3}, new int[]{2, 4})); + + // Test case 2: Arrays of different lengths + assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{1, 3}, new int[]{2})); + + // Test case 3: Arrays with even total length + assertEquals(2.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{1, 2, 8}, new int[]{3, 4, 5, 6, 7})); + + // Test case 4: Arrays with odd total length + assertEquals(3.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{1, 2, 8}, new int[]{3, 4, 5})); + + // Test case 5: Single element arrays + assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{1}, new int[]{3})); + + // Test case 6: Empty arrays + assertEquals(0.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{}, new int[]{0})); + + // Test case 7: Same element arrays + assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{2, 2, 2}, new int[]{2, 2, 2})); + } +} From e53804a254e150451fb1c163e5db12639165b13c Mon Sep 17 00:00:00 2001 From: Hardvan Date: Thu, 3 Oct 2024 14:40:18 +0000 Subject: [PATCH 02/15] Update directory --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index ee09790ed64d..447ecf3ab59a 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -217,6 +217,7 @@ * divideandconquer * [BinaryExponentiation](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/divideandconquer/BinaryExponentiation.java) * [ClosestPair](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/divideandconquer/ClosestPair.java) + * [MedianOfTwoSortedArrays](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java) * [SkylineAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/divideandconquer/SkylineAlgorithm.java) * [StrassenMatrixMultiplication](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/divideandconquer/StrassenMatrixMultiplication.java) * dynamicprogramming @@ -717,6 +718,7 @@ * [ZigzagTraversalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/ZigzagTraversalTest.java) * divideandconquer * [BinaryExponentiationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/divideandconquer/BinaryExponentiationTest.java) + * [MedianOfTwoSortedArraysTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java) * [StrassenMatrixMultiplicationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/divideandconquer/StrassenMatrixMultiplicationTest.java) * dynamicprogramming * [BoardPathTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/BoardPathTest.java) From 03ef6c4305c7e735272202c274322bb0c5190ca7 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Thu, 3 Oct 2024 20:11:54 +0530 Subject: [PATCH 03/15] Fix clang errors --- .../MedianOfTwoSortedArraysTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java index e47ad7038545..20e491390d55 100644 --- a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java +++ b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java @@ -9,24 +9,24 @@ public class MedianOfTwoSortedArraysTest { @Test void testFindMedianSortedArrays() { // Test case 1: Arrays of equal length - assertEquals(2.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{1, 3}, new int[]{2, 4})); + assertEquals(2.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 3}, new int[] {2, 4})); // Test case 2: Arrays of different lengths - assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{1, 3}, new int[]{2})); + assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 3}, new int[] {2})); // Test case 3: Arrays with even total length - assertEquals(2.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{1, 2, 8}, new int[]{3, 4, 5, 6, 7})); + assertEquals(2.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 2, 8}, new int[] {3, 4, 5, 6, 7})); // Test case 4: Arrays with odd total length - assertEquals(3.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{1, 2, 8}, new int[]{3, 4, 5})); + assertEquals(3.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 2, 8}, new int[] {3, 4, 5})); // Test case 5: Single element arrays - assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{1}, new int[]{3})); + assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1}, new int[] {3})); // Test case 6: Empty arrays - assertEquals(0.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{}, new int[]{0})); + assertEquals(0.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {}, new int[] {0})); // Test case 7: Same element arrays - assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[]{2, 2, 2}, new int[]{2, 2, 2})); + assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {2, 2, 2}, new int[] {2, 2, 2})); } } From 6be0d1d9daf6534f88bceb2f00b4f59841ceca7d Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Thu, 3 Oct 2024 20:14:07 +0530 Subject: [PATCH 04/15] Fix test --- .../divideandconquer/MedianOfTwoSortedArraysTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java index 20e491390d55..491f986a544b 100644 --- a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java +++ b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java @@ -15,7 +15,7 @@ void testFindMedianSortedArrays() { assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 3}, new int[] {2})); // Test case 3: Arrays with even total length - assertEquals(2.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 2, 8}, new int[] {3, 4, 5, 6, 7})); + assertEquals(4.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 2, 8}, new int[] {3, 4, 5, 6, 7})); // Test case 4: Arrays with odd total length assertEquals(3.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 2, 8}, new int[] {3, 4, 5})); From 41fbd46a649aed1fcddd02de79364297e552ff5c Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Thu, 3 Oct 2024 20:18:49 +0530 Subject: [PATCH 05/15] Fix test --- .../divideandconquer/MedianOfTwoSortedArraysTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java index 491f986a544b..dc5ce890d273 100644 --- a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java +++ b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java @@ -18,7 +18,7 @@ void testFindMedianSortedArrays() { assertEquals(4.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 2, 8}, new int[] {3, 4, 5, 6, 7})); // Test case 4: Arrays with odd total length - assertEquals(3.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 2, 8}, new int[] {3, 4, 5})); + assertEquals(3.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 2, 8}, new int[] {3, 4, 5})); // Test case 5: Single element arrays assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1}, new int[] {3})); From ac398d345ea7b979d75bbe107ad59f4d34f3ea5f Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Thu, 3 Oct 2024 20:22:14 +0530 Subject: [PATCH 06/15] Add private constructor --- .../divideandconquer/MedianOfTwoSortedArrays.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java b/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java index 37cfe20b754f..e9d8f71feb84 100644 --- a/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java +++ b/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java @@ -2,6 +2,9 @@ public class MedianOfTwoSortedArrays { + private MedianOfTwoSortedArrays() { + } + /** * Finds the median of two sorted arrays in logarithmic time. * From f2cf9bfb585c5ca48319dddd8c3e72ae2d942623 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Thu, 3 Oct 2024 20:25:14 +0530 Subject: [PATCH 07/15] Declare class as final --- .../thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java b/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java index e9d8f71feb84..e5ab852a7ac0 100644 --- a/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java +++ b/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java @@ -1,6 +1,6 @@ package com.thealgorithms.divideandconquer; -public class MedianOfTwoSortedArrays { +public final class MedianOfTwoSortedArrays { private MedianOfTwoSortedArrays() { } From 3d362ef612c0e69bc36d524f198e3b6f1ad5fe25 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Thu, 3 Oct 2024 20:30:38 +0530 Subject: [PATCH 08/15] Fix --- .../thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java b/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java index e5ab852a7ac0..d9e51442253c 100644 --- a/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java +++ b/src/main/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArrays.java @@ -34,7 +34,7 @@ public static double findMedianSortedArrays(int[] nums1, int[] nums2) { // Check if partition is valid if (maxLeft1 <= minRight2 && maxLeft2 <= minRight1) { // If combined array length is odd - if ((m + n) % 2 == 1) { + if (((m + n) & 1) == 1) { return Math.max(maxLeft1, maxLeft2); } // If combined array length is even From 9fac92aabd41abd1b9e096adcd91c07d073e411a Mon Sep 17 00:00:00 2001 From: Hardvan Date: Thu, 3 Oct 2024 15:03:55 +0000 Subject: [PATCH 09/15] Update directory --- DIRECTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index fbb0fe28a569..44cbbdbb7cf7 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -239,6 +239,7 @@ * [KnapsackMemoization](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/KnapsackMemoization.java) * [LevenshteinDistance](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LevenshteinDistance.java) * [LongestAlternatingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LongestAlternatingSubsequence.java) + * [LongestArithmeticSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LongestArithmeticSubsequence.java) * [LongestCommonSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LongestCommonSubsequence.java) * [LongestIncreasingSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LongestIncreasingSubsequence.java) * [LongestPalindromicSubsequence](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubsequence.java) @@ -735,6 +736,7 @@ * [KnapsackTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/KnapsackTest.java) * [LevenshteinDistanceTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LevenshteinDistanceTests.java) * [LongestAlternatingSubsequenceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestAlternatingSubsequenceTest.java) + * [LongestArithmeticSubsequenceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestArithmeticSubsequenceTest.java) * [LongestIncreasingSubsequenceTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestIncreasingSubsequenceTests.java) * [LongestPalindromicSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstringTest.java) * [LongestValidParenthesesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestValidParenthesesTest.java) From a15a53a6be4fe8078c193aa989ad883e6498507a Mon Sep 17 00:00:00 2001 From: Hardvan Date: Mon, 7 Oct 2024 12:58:23 +0000 Subject: [PATCH 10/15] Update directory --- DIRECTORY.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index a320ddd411f8..df2185b4f277 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -750,7 +750,9 @@ * [ZigzagTraversalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/ZigzagTraversalTest.java) * divideandconquer * [BinaryExponentiationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/divideandconquer/BinaryExponentiationTest.java) + * [ClosestPairTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/divideandconquer/ClosestPairTest.java) * [MedianOfTwoSortedArraysTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java) + * [SkylineAlgorithmTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/divideandconquer/SkylineAlgorithmTest.java) * [StrassenMatrixMultiplicationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/divideandconquer/StrassenMatrixMultiplicationTest.java) * dynamicprogramming * [BoardPathTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/BoardPathTest.java) @@ -763,6 +765,7 @@ * [LevenshteinDistanceTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LevenshteinDistanceTests.java) * [LongestAlternatingSubsequenceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestAlternatingSubsequenceTest.java) * [LongestArithmeticSubsequenceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestArithmeticSubsequenceTest.java) + * [LongestCommonSubsequenceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestCommonSubsequenceTest.java) * [LongestIncreasingSubsequenceTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestIncreasingSubsequenceTests.java) * [LongestPalindromicSubstringTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestPalindromicSubstringTest.java) * [LongestValidParenthesesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LongestValidParenthesesTest.java) From 100d592e38207ad50bc14a22379dd4c2a1fe3cbb Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Tue, 8 Oct 2024 15:09:30 +0530 Subject: [PATCH 11/15] Refactor to Parameterized tests --- .../MedianOfTwoSortedArraysTest.java | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java index dc5ce890d273..e9e8a45c2bec 100644 --- a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java +++ b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java @@ -2,31 +2,42 @@ import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; +import java.util.stream.Stream; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; public class MedianOfTwoSortedArraysTest { - @Test - void testFindMedianSortedArrays() { - // Test case 1: Arrays of equal length - assertEquals(2.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 3}, new int[] {2, 4})); + @ParameterizedTest + @MethodSource("provideTestCases") + void testFindMedianSortedArrays(int[] nums1, int[] nums2, double expectedMedian) { + assertEquals(expectedMedian, MedianOfTwoSortedArrays.findMedianSortedArrays(nums1, nums2)); + } + + // MethodSource that provides test cases as streams of arguments + private static Stream provideTestCases() { + return Stream.of( + // Test case 1: Arrays of equal length + Arguments.of(new int[] {1, 3}, new int[] {2, 4}, 2.5), - // Test case 2: Arrays of different lengths - assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 3}, new int[] {2})); + // Test case 2: Arrays of different lengths + Arguments.of(new int[] {1, 3}, new int[] {2}, 2.0), - // Test case 3: Arrays with even total length - assertEquals(4.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 2, 8}, new int[] {3, 4, 5, 6, 7})); + // Test case 3: Arrays with even total length + Arguments.of(new int[] {1, 2, 8}, new int[] {3, 4, 5, 6, 7}, 4.5), - // Test case 4: Arrays with odd total length - assertEquals(3.5, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1, 2, 8}, new int[] {3, 4, 5})); + // Test case 4: Arrays with odd total length + Arguments.of(new int[] {1, 2, 8}, new int[] {3, 4, 5}, 3.5), - // Test case 5: Single element arrays - assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {1}, new int[] {3})); + // Test case 5: Single element arrays + Arguments.of(new int[] {1}, new int[] {3}, 2.0), - // Test case 6: Empty arrays - assertEquals(0.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {}, new int[] {0})); + // Test case 6: Empty arrays + Arguments.of(new int[] {}, new int[] {0}, 0.0), - // Test case 7: Same element arrays - assertEquals(2.0, MedianOfTwoSortedArrays.findMedianSortedArrays(new int[] {2, 2, 2}, new int[] {2, 2, 2})); + // Test case 7: Same element arrays + Arguments.of(new int[] {2, 2, 2}, new int[] {2, 2, 2}, 2.0) + ); } } From e6c1f7b2e853955492d6796d538d33b0e941035b Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Tue, 8 Oct 2024 15:11:22 +0530 Subject: [PATCH 12/15] Fix --- .../MedianOfTwoSortedArraysTest.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java index e9e8a45c2bec..d981d848826d 100644 --- a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java +++ b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java @@ -18,26 +18,26 @@ void testFindMedianSortedArrays(int[] nums1, int[] nums2, double expectedMedian) // MethodSource that provides test cases as streams of arguments private static Stream provideTestCases() { return Stream.of( - // Test case 1: Arrays of equal length - Arguments.of(new int[] {1, 3}, new int[] {2, 4}, 2.5), + // Test case 1: Arrays of equal length + Arguments.of(new int[] {1, 3}, new int[] {2, 4}, 2.5), - // Test case 2: Arrays of different lengths - Arguments.of(new int[] {1, 3}, new int[] {2}, 2.0), + // Test case 2: Arrays of different lengths + Arguments.of(new int[] {1, 3}, new int[] {2}, 2.0), - // Test case 3: Arrays with even total length - Arguments.of(new int[] {1, 2, 8}, new int[] {3, 4, 5, 6, 7}, 4.5), + // Test case 3: Arrays with even total length + Arguments.of(new int[] {1, 2, 8}, new int[] {3, 4, 5, 6, 7}, 4.5), - // Test case 4: Arrays with odd total length - Arguments.of(new int[] {1, 2, 8}, new int[] {3, 4, 5}, 3.5), + // Test case 4: Arrays with odd total length + Arguments.of(new int[] {1, 2, 8}, new int[] {3, 4, 5}, 3.5), - // Test case 5: Single element arrays - Arguments.of(new int[] {1}, new int[] {3}, 2.0), + // Test case 5: Single element arrays + Arguments.of(new int[] {1}, new int[] {3}, 2.0), - // Test case 6: Empty arrays - Arguments.of(new int[] {}, new int[] {0}, 0.0), + // Test case 6: Empty arrays + Arguments.of(new int[] {}, new int[] {0}, 0.0), - // Test case 7: Same element arrays - Arguments.of(new int[] {2, 2, 2}, new int[] {2, 2, 2}, 2.0) + // Test case 7: Same element arrays + Arguments.of(new int[] {2, 2, 2}, new int[] {2, 2, 2}, 2.0) ); } } From b08ceea21d7036e21e5f0be8fd12f6119b5c5fda Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Tue, 8 Oct 2024 15:16:48 +0530 Subject: [PATCH 13/15] Fix --- .../divideandconquer/MedianOfTwoSortedArraysTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java index d981d848826d..5a9783c1d765 100644 --- a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java +++ b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java @@ -37,7 +37,6 @@ private static Stream provideTestCases() { Arguments.of(new int[] {}, new int[] {0}, 0.0), // Test case 7: Same element arrays - Arguments.of(new int[] {2, 2, 2}, new int[] {2, 2, 2}, 2.0) - ); + Arguments.of(new int[] {2, 2, 2}, new int[] {2, 2, 2}, 2.0)); } } From 654b6353ebbe43532ce9d70a0b18eb399bda92d2 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Tue, 8 Oct 2024 15:20:03 +0530 Subject: [PATCH 14/15] Fix --- .../divideandconquer/MedianOfTwoSortedArraysTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java index 5a9783c1d765..6cfbc2379600 100644 --- a/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java +++ b/src/test/java/com/thealgorithms/divideandconquer/MedianOfTwoSortedArraysTest.java @@ -15,7 +15,6 @@ void testFindMedianSortedArrays(int[] nums1, int[] nums2, double expectedMedian) assertEquals(expectedMedian, MedianOfTwoSortedArrays.findMedianSortedArrays(nums1, nums2)); } - // MethodSource that provides test cases as streams of arguments private static Stream provideTestCases() { return Stream.of( // Test case 1: Arrays of equal length From a3a223764cde765cf52cea30bf7e716c0136e589 Mon Sep 17 00:00:00 2001 From: siriak Date: Wed, 9 Oct 2024 05:48:37 +0000 Subject: [PATCH 15/15] Update directory --- DIRECTORY.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index b34a2dca40c2..af1e4f284445 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -31,6 +31,7 @@ * [IsPowerTwo](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/IsPowerTwo.java) * [LowestSetBit](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/LowestSetBit.java) * [NonRepeatingNumberFinder](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/NonRepeatingNumberFinder.java) + * [NumberAppearingOddTimes](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimes.java) * [NumbersDifferentSigns](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/NumbersDifferentSigns.java) * [ReverseBits](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/ReverseBits.java) * [SingleBitOperations](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/SingleBitOperations.java) @@ -639,6 +640,7 @@ * [IsPowerTwoTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/IsPowerTwoTest.java) * [LowestSetBitTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/LowestSetBitTest.java) * [NonRepeatingNumberFinderTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/NonRepeatingNumberFinderTest.java) + * [NumberAppearingOddTimesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimesTest.java) * [NumbersDifferentSignsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/NumbersDifferentSignsTest.java) * [ReverseBitsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/ReverseBitsTest.java) * [SingleBitOperationsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/SingleBitOperationsTest.java) @@ -730,6 +732,7 @@ * [LeftistHeapTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/heaps/LeftistHeapTest.java) * lists * [CircleLinkedListTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/CircleLinkedListTest.java) + * [CreateAndDetectLoopTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/CreateAndDetectLoopTest.java) * [QuickSortLinkedListTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/QuickSortLinkedListTest.java) * [ReverseKGroupTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/ReverseKGroupTest.java) * [RotateSinglyLinkedListsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/RotateSinglyLinkedListsTest.java)