避免每日太過鹹魚,一天搞定一道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 位。你的任...