面試題41 劍指offer 資料流中的中位數

2021-09-26 07:16:44 字數 823 閱讀 4515

題目:

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。

思路:

建立兩個堆,乙個最小堆乙個最大堆,要達到當元素數量是偶數時,中位數就是兩個堆頂的平均值,如果為奇數,就是兩個堆中多的那的堆的堆頂元素這樣的效果。就需要在入堆時,

**:

private

static priorityqueue

min =

newpriorityqueue

<

>()

;private

static priorityqueue

max =

newpriorityqueue

<

>

(new

comparator

()})

;static

int count =0;

private

static

void

insert

(int num)

min.

offer

(num);}

else

max.

offer

(num);}

count++;}

private

static double middlenum()

else

}

劍指 面試題41 資料流中的中位數

題目 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。例如 2,3,4 的中位數是 3 2,3 的中位數是 2 3 2 2.5 設計乙個支援以下兩種操作的資料結構...

劍指offer 面試題 資料流中的中位數

如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用insert 方法讀取資料流,使用getmedian 方法獲取當前讀取資料的中位數。這題沒做過,用乙個最大...

劍指Offer 41 資料流的中位數

題目描述 如何得到乙個資料流中的中位數?如果從資料流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從資料流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。解法1 class solution min.push back num push heap min.b...