美文网首页
13 - Hard - 两个排序数组的中位数

13 - Hard - 两个排序数组的中位数

作者: 1f872d1e3817 | 来源:发表于2018-07-16 15:13 被阅读0次

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。

    请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。

    示例 1:

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

    中位数是 2.0
    示例 2:

    nums1 = [1, 2]
    nums2 = [3, 4]

    中位数是 (2 + 3)/2 = 2.5

    版本1:排序版本

    class Solution:
        def findMedianSortedArrays(self, nums1, nums2):
            """
            :type nums1: List[int]
            :type nums2: List[int]
            :rtype: float
            """
            nums = sorted(nums1+nums2)
            n = len(nums)
            if n % 2 == 1:
                return nums[n//2]
            else:
                return (nums[n//2-1]+nums[n//2])/2
    

    版本2:将(m+n)/2之间的数据数一遍,O(m+n)

    class Solution:
        def findMedianSortedArrays(self, nums1, nums2):
            """
            :type nums1: List[int]
            :type nums2: List[int]
            :rtype: float
            """
            i = j = 0
            num_1 = num_2 = 0
            judge = (len(nums1)+len(nums2))//2
            buf = 0
            while True:
                if i >= len(nums1):
                    num = nums2[j]
                    j += 1
                elif j >= len(nums2):
                    num = nums1[i]
                    i += 1
                elif nums1[i] < nums2[j]:
                    num = nums1[i]
                    i += 1
                else:
                    num = nums2[j]
                    j += 1
                if buf == judge-1:
                    num_1 = num
                if buf == judge:
                    num_2 = num
                    break
                buf += 1
            if (len(nums1)+len(nums2)) % 2:
                return num_2
            else:
                return (num_1+num_2)/2
    
    

    O(lon(m+n))?

    相关文章

      网友评论

          本文标题:13 - Hard - 两个排序数组的中位数

          本文链接:https://www.haomeiwen.com/subject/svrbpftx.html