Skip to content

Instantly share code, notes, and snippets.

@pdu
Last active December 10, 2015 01:49
Show Gist options
  • Save pdu/4363042 to your computer and use it in GitHub Desktop.
Save pdu/4363042 to your computer and use it in GitHub Desktop.
give 2 ascending sorted arrays with same length n, find the nth number between these 2 arrays
#!/usr/bin/python
def get_nth_num(a, b):
if len(a) != len(b) or len(a) == 0:
return None
id_a, id_b = 0, 0
for _ in xrange(len(a)):
if a[id_a] <= b[id_b]:
tmp = a[id_a]
id_a += 1
else:
tmp = b[id_b]
id_b += 1
return tmp
def get_nth_num_fast_(a, left_a, right_a, b, left_b, right_b):
if right_a == left_a:
return a[left_a] < b[left_b] and a[left_a] or b[left_b]
mid_a = (left_a + right_a) / 2
mid_b = (left_b + right_b) / 2
if (right_a - left_a + 1) % 2 == 0:
if a[mid_a] < b[mid_b]:
return get_nth_num_fast_(a, mid_a + 1, right_a, b, left_b, mid_b)
else:
return get_nth_num_fast_(a, left_a, mid_a, b, mid_b + 1, right_b)
else:
if a[mid_a] < b[mid_b]:
return get_nth_num_fast_(a, mid_a, right_a, b, left_b, mid_b)
else:
return get_nth_num_fast_(a, left_a, mid_a, b, mid_b, right_b)
def get_nth_num_fast(a, b):
if len(a) != len(b) or len(a) == 0:
return None
return get_nth_num_fast_(a, 0, len(a) - 1, b, 0, len(b) - 1)
def main():
a = [1, 5, 8, 90, 100, 101]
b = [2, 6, 8, 10, 23, 45]
print get_nth_num(a, b)
print get_nth_num_fast(a, b)
a = [1, 5, 8, 9, 15, 21, 32]
b = [2, 6, 8, 10, 23, 45, 46]
print get_nth_num(a, b)
print get_nth_num_fast(a, b)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment