每日一題 480 滑動視窗中位數

2021-10-19 13:25:53 字數 1887 閱讀 2312

避免每日太過鹹魚,一天搞定一道leetcode演算法題

難度:困難中位數是有序序列最中間的那個數。如果序列的大小是偶數,則沒有最中間的數;此時中位數是最中間的兩個數的平均數。

例如:[2,3,4],中位數是 3

[2,3],中位數是 (2 + 3) / 2 = 2.5

給你乙個陣列 nums,有乙個大小為 k 的視窗從最左端滑動到最右端。視窗中有 k 個數,每次視窗向右移動 1 位。你的任務是找出每次視窗移動後得到的新視窗中元素的中位數,並輸出由它們組成的陣列。

示例 1:

給出 nums =[1

,3,-

1,-3

,5,3

,6,7

],以及 k =

3。視窗位置 中位數

----

----

-------

-----[

13-1

]-35

3671

1[3-

1-3]

5367

-113

[-1-

35]3

67-1

13-1

[-35

3]67

313-

1-3[

536]

7513

-1-3

5[36

7]6因此,返回該滑動視窗的中位數陣列 [1,

-1,-

1,3,

5,6]。

不要把問題想得太複雜,二分查詢+氣泡排序完全可以解決

**

public

double

medianslidingwindow

(int

nums,

int k)

//初始的快排,懶得寫直接呼叫

arrays.

sort

(window)

; res[0]

=getmid

(window)

;//視窗滑動

for(

int i =

0; i < nums.length - k; i++

)//向前冒泡

while

(index >

0&& window[index]

< window[index -1]

) res[i +1]

=getmid

(window);}

return res;

}//交換

private

void

swap

(int

window,

int i,

int j)

//求陣列的中位數

private

double

getmid

(int

window)

else

}//最簡單的二分查詢

--------------也希望大家給我點支援,謝謝各位大佬了!!!--------------

每日一題 480 滑動視窗中位數

因為要尋找的是中位數,無非就是佇列中的第k個或 第k個加k 1個 2 維護乙個用於查詢中間值的佇列即可 唯一一點我不知道怎麼把ans直接轉成double的陣列 public double medianslidingwindow int nums,int k while rightelse right...

480 滑動視窗中位數

題目描述 中位數是有序序列最中間的那個數。如果序列的大小是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 2,3,4 中位數是 3 2,3 中位數是 2 3 2 2.5 給你乙個陣列 nums,有乙個大小為 k 的視窗從最左端滑動到最右端。視窗中有 k 個數,每次視窗向右移動 1 ...

480 滑動視窗中位數

中位數是有序序列最中間的那個數。如果序列的長度是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 2,3,4 中位數是 3 2,3 中位數是 2 3 2 2.5 給你乙個陣列 nums,有乙個長度為 k 的視窗從最左端滑動到最右端。視窗中有 k 個數,每次視窗向右移動 1 位。你的任...