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)).
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
python代码
class Solution:
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
nums = []
md = 0
if len(nums1) == 0:
nums = nums2
elif len(nums2) == 0:
nums = nums1
elif nums1[len(nums1)-1] <= nums2[0]: #第一个数组最后一位比第二个数组第一位小
nums = nums1 + nums2
elif nums1[0] >= nums2[len(nums2)-1]: #第一个数组第一位比第二个数组最后一位大
nums = nums2 + nums1
else:
p1 = 0
p2 = 0
for i in range(len(nums1)+len(nums2)):
if p1 == len(nums1):
nums.append(nums2[p2])
p2 += 1
elif p2 == len(nums2):
nums.append(nums1[p1])
p1 += 1
else:
if nums1[p1] <= nums2[p2]:
nums.append(nums1[p1])
p1 += 1
else:
nums.append(nums2[p2])
p2 += 1
if len(nums) % 2 == 0: #偶数个
md = (nums[int(len(nums)/2)-1] + nums[int(len(nums)/2)]) / 2
else: #奇数个
md = nums[int(len(nums)/2)]
return float(md)
PS:其实这个算法是最容易想到的算法,利用两个有序列表的特性,把两个列表整合成一个列表再找中位数,所以效率并不出众,下图足以说明: