4. Median of Two Sorted Arrays(两个有序数组的中位数)

来源:互联网 发布:网络打假举报电话是 编辑:程序博客网 时间:2024/05/17 01:38

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

Example 1:
nums1 = [1, 3]
nums2 = [2]

The median is 2.0
Example 2:
nums1 = [1, 2]
nums2 = [3, 4]

The median is (2 + 3)/2 = 2.5

非正确答案,求的不是严格中位数,当两个数组元素个数总和为偶数时,求的是中间两个数左边的数:

class Solution:    def findMedianSortedArrays(self, nums1, nums2):        """        :type nums1: List[int]        :type nums2: List[int]        :rtype: float        """        return self.findMedian_logn(nums1, len(nums1), nums2, len(nums2))    def findMedian_logn(self, nums1, n1, nums2, n2):        m1 = (n1-1)//2        m2 = (n2-1)//2        if n1==1:            if n2 ==1:                return nums1[0] if nums1[0]<nums2[0] else nums2[0]            if n2%2==0:                if nums1[0] >= nums2[m2+1]:                    return nums2[m2+1]                elif nums1[0] <= nums2[m2]:                    return nums2[m2]                else:                    return nums1[0]            else:                if nums1[0] >=nums2[m2]:                    return nums2[m2]                elif nums1[0] <= nums2[m2-1]:                    return nums2[m2-1]                else:                    return nums1[0]        elif n2==1:            if n1%2==0:                if nums2[0] >= nums1[m1+1]:                    return nums1[m1+1]                elif nums2[0] <= nums1[m1]:                    return nums1[m1]                else:                    return nums2[0]            else:                if nums2[0] >= nums1[m1]:                    return nums2[m2]                elif nums2[0] <= nums1[m1-1]:                    return nums1[m1-1]                else:                    return nums2[0]        else:            cutlen = n1/2 if n1/2 < n2/2 else n2/2            if nums1[m1] == nums2[m2]:                return nums1[m1]            elif nums1[m1] < nums2[m2]:                return self.findMedian_logn(nums1[cutlen:], n1-cutlen, nums2, n2-cutlen)            else:                return self.findMedian_logn(nums1, n1-cutlent, nums2[cutlen:], n2-cutlen)

leetcode接受的代码,比较暴力求解

class Solution:    def findMedianSortedArrays(self, nums1, nums2):        """        :type nums1: List[int]        :type nums2: List[int]        :rtype: float        """        total = len(nums1)+len(nums2)        res_list=[]          while len(nums1) and len(nums2):              if nums1[0]<nums2[0]:                  res_list.append(nums1.pop(0))              else:                  res_list.append(nums2.pop(0))          if len(nums1):              res_list+=nums1          elif len(nums2):              res_list+=nums2                 if total%2==0:            return (res_list[total//2-1]+res_list[total//2])/2        else:            return res_list[total//2]
阅读全文
0 0