LeetCode2两个排序数组的中位数

今日题目

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。请找出这两个有序数组的中位数。 要求算法的时间复杂度为 O(log (m+n)) 。你可以假设 nums1 和 nums2 不同时为空。

# 示例1
nums1 = [1, 3]
nums2 = [2]

中位数是 2.0

# 示例2
nums1 = [1, 2]
nums2 = [3, 4]

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

方法一

这是我见这个题目第一眼就想到的方法,分三步:
1.两个数组拼接,排序
2.测拼接后数组长度,判断奇偶
3.测出中位数下标,求出中位数

class Solution(object):
    def findMedianSortedArrays(self,nums1,nums2):
        # 拼接数组
        nums = nums1 + nums2
        #排序
        nums.sort()
        #测长度
        l = len(nums)
        #判断奇偶求中位数下标
        if l%2 == 0:
            index = [l//2-1,l//2]
        else:
            index = [l//2,l//2]
        # 求中位数
        median_num = (nums[index[0]]+nums[index[1]])/2.0
        return median_num
nums1 = [1,2]
nums2 = [3,4,6]
So = Solution()
result = So.findMedianSortedArrays(nums1,nums2)
print(result)

方法二

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        t = nums1 + nums2 #两个数组拼接
        t.sort()  #合并后排序
        l = len(t)
        medium = l//2
        if l%2 == 1:
            return float(t[medium]) # 奇数直接返回中间
        else:
            return (t[medium-1] + t[medium])/2.0 # 偶数返回前后相加除以2
nums1 = [1,2,4]
nums2 = [3,4,6]
So = Solution()
result = So.findMedianSortedArrays(nums1,nums2)
print(result)

方法三

方法一中排序我们是直接调用了内置函数sort,当然,我们也可以自己实现排序算法,然后和方法一一样的思想执行。

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        nums = []
        len1 = len(nums1)
        len2 = len(nums2)
        num1 = num2 = 0
        len0 = len1 + len2
        for i in range(len0): #遍历两个列表,实现拼接排序
            if(num1 == len1): # 列表nums1遍历完
                nums.append(nums2[num2])
                num2 = num2 + 1
                continue
            if(num2 == len2):# 列表nums2遍历完
                nums.append(nums1[num1])
                num1 = num1 + 1
                continue
            # 从小到大比较,小数先入 nums 列表
            if(nums1[num1] <= nums2[num2]):
                nums.append(nums1[num1])
                num1 = num1 + 1
                continue
            else:
                nums.append(nums2[num2])
                num2 = num2 + 1
                continue
        if(len0%2 == 0):
            return (nums[len0//2] + nums[len0//2-1])/2.0
        else:
            return nums[len0//2]
nums1 = [1,2,4]
nums2 = [3,4,6]
So = Solution()
result = So.findMedianSortedArrays(nums1,nums2)
print(result)

来自 老表 https://mp.weixin.qq.com/s/_MTj0DgJAWWlzfH4C48sZw
老表《简说Python》提供
向林
2020年1月5日于长沙
好好学习,天天向上

你可能感兴趣的:(LeetCode)