LeetCode04两个排序数组的中位数

题目描述:

给定两个大小为 m 和 n 的有序数组 nums1nums2

请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。

你可以假设 nums1nums2 不同时为空。

示例 1:

1
2
3
4
nums1 = [1, 3]
nums2 = [2]

中位数是 2.0

示例 2:

1
2
3
4
nums1 = [1, 2]
nums2 = [3, 4]

中位数是 (2 + 3)/2 = 2.5

解题思路:

  1. 因为两个数组已经是有序的了,寻找中位数,只需要从小到大往后数即可
  2. 如果总长度为奇数,则中位数是第
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    3. 分情况去处理,然后不断比较并数到相应的位置即可



    #### 代码实现:

    GitHub地址:https://github.com/zhangdianlei/LeetCode_python/blob/master/src/c04.py

    ```python
    class Solution:
    def findMedianSortedArrays(self, nums1, nums2):
    """
    :type nums1: List[int]
    :type nums2: List[int]
    :rtype: float
    """
    nums1 = [1, 2]
    nums2 = [3, 4]

    mean = int((len(nums1) + len(nums2) + 1) / 2)
    totalLength = len(nums1) + len(nums2)

    if (totalLength % 2) == 0:

    min = 0
    pointer = 0

    while pointer < mean:
    if len(nums1) > 0 and len(nums2) > 0:
    if nums1[0] > nums2[0]:
    min = nums2.pop(0)
    else:
    min = nums1.pop(0)

    elif len(nums1) == 0:
    min = nums2.pop(0)

    elif len(nums2) == 0:
    min = nums1.pop(0)

    pointer = pointer + 1

    min_nums1 = 0
    min_nums2 = 0

    if len(nums1) == 0:
    min_nums1 = nums2[0]
    else:
    min_nums1 = nums1[0]

    if len(nums2) == 0:
    min_nums2 = nums1[0]
    else:
    min_nums2 = nums2[0]

    if min_nums1 >= min_nums2:
    return (min + min_nums2) / 2
    else:
    return (min + min_nums1) / 2

    else:
    min = 0
    pointer = 0

    while pointer < mean:
    if len(nums1) > 0 and len(nums2) > 0:
    if nums1[0] > nums2[0]:
    min = nums2.pop(0)
    else:
    min = nums1.pop(0)

    elif len(nums1) == 0:
    min = nums2.pop(0)

    elif len(nums2) == 0:
    min = nums1.pop(0)

    pointer = pointer + 1

    return min