返回
两个正序数组的中位数寻找实质在探索数字中的平衡之道
前端
2024-01-22 16:37:07
踏入平衡之道,解开中位数之谜
中位数,一个看似简单却蕴含奥秘的概念,它代表着数字系列中的平衡点,是探索数据分布的关键指标。寻找两个正序数组的中位数,正是算法题leetcode 300的挑战所在。
一、题目数字的平衡博弈
给定两个正序数组nums1和nums2,需要找出它们合并后的中位数。中位数的含义是,将两个数组合并成一个有序数组后,这个有序数组中间的数字就是中位数。
二、解法总览:思维导图指引探索路径
为了解决leetcode 300的难题,让我们先用思维导图勾勒出解题思路的脉络。
[思维导图]
三、全部解法:数字之间的平衡角逐
- 方案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]
- 方案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]
数字的平衡之道,算法智慧的结晶
寻找两个正序数组的中位数,看似简单的数字比较,却蕴藏着算法智慧的结晶。从思维导图的清晰指引到全部解法的逐一剖析,我们共同踏上了数字之间的平衡之旅,领略了算法世界中的奇妙魅力。