4. Median of Two Sorted Arrays(兩個有序陣列的中位數)
阿新 • • 發佈:2019-01-24
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
非正確答案,求的不是嚴格中位數,當兩個陣列元素個數總和為偶數時,求的是中間兩個數左邊的數:
class Solution:
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
return self.findMedian_logn(nums1, len(nums1), nums2, len(nums2))
def findMedian_logn(self, nums1, n1, nums2, n2):
m1 = (n1-1)//2
m2 = (n2-1)//2
if n1==1:
if n2 ==1:
return nums1[0] if nums1[0]<nums2[0] else nums2[0]
if n2%2==0:
if nums1[0] >= nums2[m2+1]:
return nums2[m2+1 ]
elif nums1[0] <= nums2[m2]:
return nums2[m2]
else:
return nums1[0]
else:
if nums1[0] >=nums2[m2]:
return nums2[m2]
elif nums1[0] <= nums2[m2-1]:
return nums2[m2-1]
else:
return nums1[0]
elif n2==1:
if n1%2==0:
if nums2[0] >= nums1[m1+1]:
return nums1[m1+1]
elif nums2[0] <= nums1[m1]:
return nums1[m1]
else:
return nums2[0]
else:
if nums2[0] >= nums1[m1]:
return nums2[m2]
elif nums2[0] <= nums1[m1-1]:
return nums1[m1-1]
else:
return nums2[0]
else:
cutlen = n1/2 if n1/2 < n2/2 else n2/2
if nums1[m1] == nums2[m2]:
return nums1[m1]
elif nums1[m1] < nums2[m2]:
return self.findMedian_logn(nums1[cutlen:], n1-cutlen, nums2, n2-cutlen)
else:
return self.findMedian_logn(nums1, n1-cutlent, nums2[cutlen:], n2-cutlen)
leetcode接受的程式碼,比較暴力求解
class Solution:
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
total = len(nums1)+len(nums2)
res_list=[]
while len(nums1) and len(nums2):
if nums1[0]<nums2[0]:
res_list.append(nums1.pop(0))
else:
res_list.append(nums2.pop(0))
if len(nums1):
res_list+=nums1
elif len(nums2):
res_list+=nums2
if total%2==0:
return (res_list[total//2-1]+res_list[total//2])/2
else:
return res_list[total//2]