范文无忧网学习方法作业答案

算法作业求两个不等长有序数组的中位数

01月16日 编辑 fanwen51.com

这个比较不好讲清楚,先假设 A 和 B 都是升序的。这个问题的关键在于给定 k,怎样找到 A 和 B 合并后的第 k 大元素。我们可以这样做:1. 把 A 平均分为前后两个部分,前部分有 x 个元素,后部分有 n1-x 个元素(由于 A 是有序的,所以后一部分的所有元素大于前一部分)。A[x] = A的后一部分的第一个元素。2. 同理把 B 也平均分成前后两个部分,前部分有 y 个元素,后部分有 n2-y 个元素。

B[y] = B的后一部分的第一个元素。3. 由于两个数组都是被平均分割的,所以可以近似地认为 x = n1/2, y = n2/2。这里不妨设 A[x]B[y] 处理过程和下面类似):=============================== 情况1 ============================ 由于在 A 中,A[x] 前面有 x 个元素,在 B 中,B[y] 前面有 y 个元素,并且又有 A[x]r2) return A[l1+k-1]; if (A[x]

推荐阅读
图文推荐
栏目列表