Skip to content

Latest commit

 

History

History

004.Median-of-Two-Sorted-Arrays

4. Median of Two Sorted Arrays

1 二分法

基本思想:

此题可以拓展为求两个排序数组的总第K个最小数问题 FindKthSmallest。此题还可以扩展到M个数组。 函数定义为:

FindKthSmallest(nums1,a,m,nums2,b,n,K) 

a定义了数组A的首元素位置,m定义了数组A的长度。类似数组B有定义b,n。K是求总体的第K个最小数。

关键算法:  

考察每个数组分别第K/2个数。如果数组A的第K/2个数小于数组B的第K/2个数,则说明总体的第K个数不可能在数组A的前K/2个数中,因为假设这样的数存在于A的前K/2个中,它也不可能打过B的前K/2个,故总体上不可能大过K个数。同理,如果数组A的第K/2个数大于数组B的第K/2个数,则说明总体的第K个数不可能在数组B的前K/2个数中。

细节
  1. 每次都优先处理长度小的数组,希望它尽快到零。所以长度小的数组不在第一个的话,就将两个数组交换再调用。
  2. 两个边界条件:K=1 时取两个数组首元素的最小值. m=0时,直接在B数组里找第K个元素。

2 Heap

利用堆排序,维持一个只含有两个元素的priority_queue,每出列一个,就在相对应的数组里面再取一个放进去。
程序写起来更容易。

Update: 因为priority_queue默认是大顶堆,优先出列大数,所以可以从两个顺序数组从后往前遍历,从高往低取第K个元素。

Leetcode Link