【Leetcode】Pythonは2つのソート配列の中位数を実現
2つの配列が結合した総要素長が奇数の場合,中位数の下付き文字はn/2である.2つの配列が結合された総要素の個数が偶数の場合、中位数は下付きn/2-1と下付きn/2の2つの要素の平均値である.従って、全長のパリティにかかわらず、n/2を右中位数、n/2-1を左中位数とすることができ、総長が奇数の場合、左中位数は使用されない.ただし、n/2+1番目の要素を見つける必要があります.
class Solution(object):
def findMedianSortedArrays(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: float
"""
#
if nums1 is None or nums2 is None:
return
# nums1、nums2
nums1_length = len(nums1)
nums2_length = len(nums2)
#
total_length = nums1_length + nums2_length
# 0
if total_length == 0:
return
# nums2 , , , nums1
if nums2_length == 0:
return self.findMedianSortedArrays(nums2, nums1)
left = -1
right = -1
nums1_Start = 0
nums2_Start = 0
# ,+1 range
for i in range(int(total_length/2)+1):
# left right
left = right
# nums1 nums1 (nums2 nums2 nums1 nums2 )
if nums1_Start < nums1_length and (nums2_Start >= nums2_length or nums1[nums1_Start] < nums2[nums2_Start]):
# right nums1 , nums1 1
right = nums1[nums1_Start]
nums1_Start += 1
else:
# right nums2 , nums2 1
right = nums2[nums2_Start]
nums2_Start += 1
# & 1 0 , 2, total_length
# total_length % 2 == 0 , &
if (total_length & 1) == 0:
return (left+right)/2.0
else:
# 1.0
return right/1.0
if __name__ == '__main__':
# nums1 = [1, 3]
# nums2 = [2]
nums1 = [1, 2]
nums2 = [3, 4]
s = Solution()
median_num = s.findMedianSortedArrays(nums1, nums2)
print(median_num)