Skip to content

Instantly share code, notes, and snippets.

@zedchance
Last active October 7, 2021 05:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zedchance/751e928d5fc34ea353d4992d5501b01f to your computer and use it in GitHub Desktop.
Save zedchance/751e928d5fc34ea353d4992d5501b01f to your computer and use it in GitHub Desktop.
Finds low median of 2 sorted arrays
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