4. Median of Two Sorted Arrays

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

Code:

class Solution(object):
    def findMedianSortedArrays(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: float
        """
        nums = [0] * (len(nums1) + len(nums2))  # 合并列表
        i, j, k = 0, 0, 0
        while k < len(nums):    # 循环合并
            if i >= len(nums1): # 如果只剩列表2
                nums[k] = nums2[j]  # 添加列表2的元素
                j += 1
            elif j >= len(nums2):   # 如果只剩列表1的元素
                nums[k] = nums1[i]  # 添加列表1的元素
                i += 1
            else:   # 如果两列表都存在
                if nums1[i] < nums2[j]: # 取两列表头部较小值
                    nums[k] = nums1[i]
                    i += 1
                else:
                    nums[k] = nums2[j]
                    j += 1 
            k += 1  # 移动合并后列表的游标
        if len(nums) % 2 == 1:  # 如果合并后的列表奇数个元素
            n = int((len(nums)-1)/2)
            m = nums[n]
        else:   # 偶数个
            mi = nums[int(len(nums) / 2 - 1)]
            ma = nums[int(len(nums) / 2)]
            m = (mi+ma)/2
        return m

# 如果新列表数是4的话,那么平均值为(nums[1]+nums[2])/2   从零开始计数