您的位置:首页 > 其它

算法分析课每周练习 Median of Two Sorted Arrays

2017-06-26 14:35 441 查看
题目

Median of two sorted arrays

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)).

分析

这种比较搜索类问题,由于搜索树的深度为O(log(N))次,所以算法复杂度最好也是O(log(m+n)),关键在于对搜索树剪枝,快速排除不用比较的部分

class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
len1 = len(nums1)
len2 = len(nums2)
if (len1 + len2) % 2 == 1:
return self.getKth(nums1, nums2, (len1 + len2)/2 + 1)
else:
return (self.getKth(nums1, nums2, (len1 + len2)/2) + self.getKth(nums1, nums2, (len1 + len2)/2 + 1)) * 0.5

def getKth(self, nums1, nums2, k):
len1 = len(nums1)
len2 = len(nums2)

if len1 > len2:
return self.getKth(nums2, nums1, k)
if len1 == 0:
return nums2[k - 1]
if k == 1:
return min(nums1[0], nums2[0])
halfOfK = min(k/2, len1)
leftOfK = k - halfOfK
if nums1[halfOfK - 1] <= nums2[leftOfK - 1]:
return self.getKth(nums1[halfOfK:], num
4000
s2, leftOfK)
else:
return self.getKth(nums1, nums2[leftOfK:], halfOfK)

解析

   每次比较把不在后k的部分剪掉不比较,再把剪掉的个数从搜索的位次减去,搜索
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: