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

来源:互联网 发布:典型hadoop云计算 编辑:程序博客网 时间:2024/06/05 06:05

题目

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:], nums2, leftOfK)        else:            return self.getKth(nums1, nums2[leftOfK:], halfOfK)

解析

   每次比较把不在后k的部分剪掉不比较,再把剪掉的个数从搜索的位次减去,搜索

原创粉丝点击