leetcode 4. 寻找两个正序数组的中位数

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5
示例 3:

输入:nums1 = [0,0], nums2 = [0,0]
输出:0.00000
示例 4:

输入:nums1 = [], nums2 = [1]
输出:1.00000
示例 5:

输入:nums1 = [2], nums2 = []
输出:2.00000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路:

从两个数组的第一个开始找,找出中间的两个数字即可

题解:

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        m,n = len(nums1),len(nums2)
        r = int((m+n)/2)
        d = k = i = j = ans = 0
        while(i<m and j<n and ans <= r):
            if (nums1[i] < nums2[j]):
                d,k = k,nums1[i]
                i += 1
            else:
                d,k = k,nums2[j]
                j += 1
            ans += 1
            print(d,k,i,j,ans)
        while(i<m and ans <= r):
            d, k = k, nums1[i]
            i += 1
            ans += 1
            print(d, k, i, j, ans)
        while (j < n and ans <= r):
            d, k = k, nums2[j]
            j += 1
            ans += 1
            print(d, k, i, j, ans)
        # print(d,k)
        if (m+n)%2:
            return k
        return (d+k)/2
        # return k if (m+n)%2 else (d+k)/2
        # return d,k
print(Solution.findMedianSortedArrays(Solution,[3,4],[1,2]))


                
作者:红雨
出处:https://www.cnblogs.com/52why
微信公众号: 红雨python
原文地址:https://www.cnblogs.com/52why/p/14502460.html