P1168 中位數題解

孤鹜长天-發表於2024-07-31

題目連結:https://www.luogu.com.cn/problem/P1168
題目描述:給定一個長度為 N 的非負整數序列 A,對於前奇數項求中位數。
思路講解:最簡單的想法就是每次取我們要的那段陣列然後排序在輸出中位數。確實可以,但是太慢了,直接超時。那就是說要縮短時間,那就可以直接用到堆這個東西。這玩意其實就一二叉樹,比父節點大的都放右節點,小的就放在左節點。當然也沒必要這麼嚴格,因為堆只是取最頂端的那個節點那這個思路不就來了嗎,咱直接就拿第一個當個標準點,創立兩個堆,比它大的放一個堆,比它小的放另一個堆,然後每次新增新元素的時候把這個堆更新一下就可以了。然後當我們到達需要取中位數的那個節點也就是1,3,5等數的時候,將兩個堆進行比較把多的那個堆的堆頂放少的那個堆,再把兩個堆和標準值更新一下就可以了,當兩個堆元素一樣多的時候,那個標準值就是我們要的中位數

相關文章