Leetcode-04-Median of Two Sorted Arrays-python

1.1 题目

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)).
You may assume nums1 and nums2 cannot be both empty.

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

题目的思考:
两个数组中的中位数,并且要求在于log(m+n),想到这个的话便想到了二分查找,这是目前通过题目得出信息,分析具体,要找到具体的中位数,所以需要将两个数组合并,然后在进行排序,中位数的特殊位置,查找到中位数,利用python自带的一些方法进行操作。

1.2 代码

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        if len(nums1) < 1 and len(nums2) <1:
            return False
        nums1.extend(nums2)
        nums1.sort()
        
        mid = len(nums1) // 2
        if len(nums1) % 2  == 0:
            return (nums1[mid]+nums1[mid-1])/2.0
        else:
            return nums1[mid]

1.3 对结果的分析

通过提交得出下面的结果
在这里插入图片描述
发现这种方式还是属于暴利的方式,而且是通过python的一些封装好的方式去解决,然后查询了leetcode的和其他的博主的方法,了解到了解题的思路:就是利用题目中已经阐述了两组数组都是有序,然后从两组数组的中间位置的数提取出来进行比较,然后中间数大的那一组往递减的方向移动,数小的那一组往递增的方向移动,直到发生两组数比较与前面的比较发生了转换的时候,便说明中位数在这四个数中间的位置。举例分析
在这里插入图片描述
在这里插入图片描述
备注:图片来自相关链接。

相关代码

def median(A, B):
    m, n = len(A), len(B)
    if m > n:
        A, B, m, n = B, A, n, m
    if n == 0:
        raise ValueError

    imin, imax, half_len = 0, m, (m + n + 1) / 2
    while imin <= imax:
        i = (imin + imax) / 2
        j = half_len - i
        if i < m and B[j-1] > A[i]:
            # i is too small, must increase it
            imin = i + 1
        elif i > 0 and A[i-1] > B[j]:
            # i is too big, must decrease it
            imax = i - 1
        else:
            # i is perfect

            if i == 0: max_of_left = B[j-1]
            elif j == 0: max_of_left = A[i-1]
            else: max_of_left = max(A[i-1], B[j-1])

            if (m + n) % 2 == 1:
                return max_of_left

            if i == m: min_of_right = B[j]
            elif j == n: min_of_right = A[i]
            else: min_of_right = min(A[i], B[j])

            return (max_of_left + min_of_right) / 2.0

1.4 sort

其实就是系统内部实现了一种综合的排序方法,只是封装好直接用,看似所写的代码短,其实在执行时是进行了排序的,造成时间复杂度的增加,而后面的方法是直接通过递归来实现寻找中位数的方法,极大的减缓了时间复杂度。

1.5 相关链接

1.LeetCode 004 Median of Two Sorted Arrays 详细分析(图片来源)
2.C++,java,Python的内部实现sort怎么实现的,有什么不同?
3.leetcode官方答案
4.python sort函数内部实现原理

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值