3 4 多陣列中位數

2022-09-03 03:57:12 字數 964 閱讀 8721

題目描述:

給定兩個有序陣列arr1和arr2,兩個陣列長度都為n,求兩個陣列中所有數的上中位數。

例如:arr1 = ;

arr2 = ;

一共8個數則上中位數是第4個數,所以返回3。

arr1 = ;

arr2 = ;

一共6個數則上中位數是第3個數,所以返回2。

要求:時間複雜度o(logn)

1/*2

思路: 二分思路

3首先分別找出兩個陣列arr1和arr2的中位數,分別為mid1,mid2,比較,

41) 如果mid1 == mid2,則該數即為所有數的上中位數。

52) mid1 > mid2時:

6若陣列長度n為偶數時:

7因為mid1>mid2,所以mid2不可能是所有數的上中位數,arr1中mid1後面的數也不可能是上中位數,

8此時兩個陣列就分別篩選掉了一半,然後遞迴對arr1的前半部分和arr2的後半部分求所有數的上中位數。

9若陣列長度n為奇數時:

10因為mid1>mid2,所以mid1不可能是所有數的上中位數,但mid2有可能是,由於球上中位數的兩個陣列

11必須等長,因此,我們遞迴對arr1的前半部分(包括mid1)和arr2的後半部分(包括mid2)求所有數的上中位數。

123) mid1 < mid2時的情況和 2)類似。

13*/

14 #include 15 #include 16

using

namespace

std;

1718

int findprocess(vector arr1, int l1, int r1, vector arr2, int l2, int

r2)32

33int getupmedian(vector arr1, vectorarr2)

3839

intmain()

中位數的中位數

參照王曉東的演算法設計 中位數的中位數,即將一串數分成n段,求其排好序了的中間那個數,再把這些所有中位數再求一次中位數。for int i 0 i r p 4 5 i 找中位數的中位數,r p 4即上面所說的n 5 int x lineselect a,p,p r p 4 5,r p 4 10 線性...

樹狀陣列 二分 中位數之中位數

給出乙個長度為 n 的序列 a 首先求出其所有區間的中位數,將這些中位數構成的集合記為 s 求 s 中所有數的中位數。此題中位數指 有 n 個數,第 left lfloor frac right rfloor 1 個數即為中位數。資料範圍 1 leq n leq 10 5,1 leq a i leq...

BFPRT(中位數的中位數)演算法

又稱為 中位數的中位數演算法 該演算法由 blum floyd pratt rivest tarjan 在1973年提出,最壞時間複雜度為o n 最差的空間複雜度為o logn 演算法步驟 1 將 n 個元素劃分為 n 5 個組,每組 5 個元素,若有剩餘,捨去 2 使用排序方法找到 n 5 個組中...