Last active
October 7, 2021 05:08
-
-
Save zedchance/751e928d5fc34ea353d4992d5501b01f to your computer and use it in GitHub Desktop.
Finds low median of 2 sorted arrays
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest | |
def median(a, b): | |
""" finds the low median of 2 sorted arrays, a and b """ | |
def _median(a, b, index): | |
if index == 0: | |
if len(a) == 0: | |
return b[0] | |
elif len(b) == 0: | |
return a[0] | |
else: | |
return min(a[0], b[0]) | |
elif len(a) == 0: | |
return _median(a, b[1:], index - 1) | |
elif len(b) == 0: | |
return _median(a[1:], b, index - 1) | |
elif a[0] < b[0]: | |
return _median(a[1:], b, index - 1) | |
else: | |
return _median(a, b[1:], index - 1) | |
n = len(a) + len(b) | |
if n == 0: | |
return None | |
if n % 2 == 0: | |
index = n // 2 - 1 | |
else: | |
index = n // 2 | |
return _median(a, b, index) | |
class Test(unittest.TestCase): | |
def test_median(self): | |
assert median([1, 2, 3], [1, 2, 3]) == 2 | |
assert median([1, 2, 3, 4, 5], []) == 3 | |
assert median([], [1, 2, 3, 4, 5]) == 3 | |
assert median([1, 2, 3], [4, 5]) == 3 | |
assert median([0, 1], [2, 3, 4]) == 2 | |
assert median([1, 1, 1], [1, 1, 1]) == 1 | |
assert median([1, 3, 5], [4, 7]) == 4 | |
assert median([4, 5, 6], [1, 3, 5]) == 4 | |
assert median([1], [2]) == 1 | |
assert median([], [2]) == 2 | |
assert median([], []) is None | |
if __name__ == '__main__': | |
unittest.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment