【Leetcode】Pythonは2つのソート配列の中位数を実現

4283 ワード

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)