Median of Two Sorted Arrays--leetcode

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

一开始写的可惜出错,边界情况判断不清,这并不是一个简单的问题。


先来一个比较无脑的ruby黑魔法

def find_median_sorted_arrays(a, b)
  c = (a + b).sort
  mid = c.size/2
  ( c.size.odd?) ? c[mid] : ((c[mid]+c[mid-1]).to_f/2)
end

下面是分治法,速度会快一点

def find_median_sorted_arrays(a,b)
  len=a.size+b.size
  return find_kth(a,b,len/2+1) if len.odd? 
  (find_kth(a,b,len/2)+find_kth(a,b,len/2+1))*0.5
end
## k>0
def find_kth(a,b,k)   
  return find_kth(b,a,k) if a.size<b.size  #ensure a.size >= b.size
  return a[k-1] if b.size==0
  return a[0]>b[0] ? b[0] : a[0] if k==1
  lenb=[b.size,k/2].min
  lena=k-lenb
  return find_kth(a[lena..-1],b,k-lena) if a[lena-1]<b[lenb-1]
  find_kth(a,b[lenb..-1],k-lenb)
end

临界情况

推荐阅读更多精彩内容