返回

两个正序数组的中位数寻找实质在探索数字中的平衡之道

前端

踏入平衡之道,解开中位数之谜

中位数,一个看似简单却蕴含奥秘的概念,它代表着数字系列中的平衡点,是探索数据分布的关键指标。寻找两个正序数组的中位数,正是算法题leetcode 300的挑战所在。

一、题目数字的平衡博弈

给定两个正序数组nums1和nums2,需要找出它们合并后的中位数。中位数的含义是,将两个数组合并成一个有序数组后,这个有序数组中间的数字就是中位数。

二、解法总览:思维导图指引探索路径

为了解决leetcode 300的难题,让我们先用思维导图勾勒出解题思路的脉络。

[思维导图]
三、全部解法:数字之间的平衡角逐

  1. 方案1:合并数组法——直接合并,逐个比较

思路:将两个数组合并成一个数组,然后对合并后的数组进行排序,最后取合并后数组中间的数字作为中位数。

[代码]

def findMedianSortedArrays(nums1, nums2):
    merged_array = nums1 + nums2
    merged_array.sort()
    if len(merged_array) % 2 == 0:
        return (merged_array[len(merged_array) // 2 - 1] + merged_array[len(merged_array) // 2]) / 2
    else:
        return merged_array[len(merged_array) // 2]
  1. 方案2:双指针法——有序推进,动态比较

思路:使用两个指针分别指向nums1和nums2的开头,比较两个指针指向的数字,将较小的数字加入合并后的数组中,同时将该指针右移一位。重复此过程,直到两个指针都到达各自数组的末尾。最后取合并后数组中间的数字作为中位数。

[代码]

def findMedianSortedArrays(nums1, nums2):
    i, j = 0, 0
    merged_array = []
    while i < len(nums1) and j < len(nums2):
        if nums1[i] < nums2[j]:
            merged_array.append(nums1[i])
            i += 1
        else:
            merged_array.append(nums2[j])
            j += 1
    while i < len(nums1):
        merged_array.append(nums1[i])
        i += 1
    while j < len(nums2):
        merged_array.append(nums2[j])
        j += 1
    if len(merged_array) % 2 == 0:
        return (merged_array[len(merged_array) // 2 - 1] + merged_array[len(merged_array) // 2]) / 2
    else:
        return merged_array[len(merged_array) // 2]

数字的平衡之道,算法智慧的结晶

寻找两个正序数组的中位数,看似简单的数字比较,却蕴藏着算法智慧的结晶。从思维导图的清晰指引到全部解法的逐一剖析,我们共同踏上了数字之间的平衡之旅,领略了算法世界中的奇妙魅力。