LeetCode 滑動視窗中位數

2022-06-24 08:36:14 字數 1338 閱讀 5104

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

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

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

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

示例:給出 nums = [1,3,-1,-3,5,3,6,7],以及 k = 3。

視窗位置

中位數[1 3 -1] -3 5 3 6 7

11 [3 -1 -3] 5 3 6 7

-11 3 [-1 -3 5] 3 6 7

-11 3 -1 [-3 5 3] 6 7

31 3 -1 -3 [5 3 6] 7

51 3 -1 -3 5 [3 6 7]

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

a:解題思路和劍指offer系列——63.資料流中的中位數相同

運用乙個大根堆和乙個小跟堆處理。

public double medianslidingwindow(int nums, int k) ;

}double res = new double[nums.length - k + 1];

if (k == 1)

return res;

}arraylistarray = new arraylist<>();

priorityqueueq1 = new priorityqueue<>(comparator.reverseorder());

priorityqueueq2 = new priorityqueue<>();

int left = 0, right = 0;

while (right < nums.length) else

right++;

while (right - left > k) else

left++;

}if (k % 2 == 1)

while (q2.size() > q1.size())

} else

while (q2.size() > q1.size())

}if (right - left == k) else }}

for (int i = 0; i < array.size(); i++)

return res;

}

還是固定滑動視窗,先右後左,再處理視窗。

滑動視窗中位數

中位數是有序序列最中間的那個數。如果序列的長度是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 給你乙個陣列 nums,有乙個長度為 k 的視窗從最左端滑動到最右端。視窗中有 k 個數,每次視窗向右移動 1 位。你的任務是找出每次視窗移動後得到的新視窗中元素的中位數,並輸出由它們組...

leetcode480 滑動視窗中位數

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

leetcode 480 滑動視窗中位數

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