Leetcode 480 滑動視窗中位數 C

2021-10-08 02:07:28 字數 1315 閱讀 7458

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

例如:[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 1

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

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

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

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

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

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

我們維持乙個大小為k的有序滑動視窗

當我們進行滑動時,我們先利用二分查詢的方法找到出視窗的元素的位置,然後讓其和替換為剛進入視窗的數。然後我們再進行排序,因為視窗中只有可能有唯一乙個導致無序的數,也就是剛進入視窗那個數。我們可以採用氣泡排序的思想,將其交換到應該在的位置。

詳細過程見**

int

find

(vector<

int>

&nums,

int n1)

else

if(nums[mid]

else j = mid -1;

}return-1

;}void

sortagain

(vector<

int>

&nums,

int begin)

}else

if(begin!=

0&& nums[begin]

)}} vector<

double

>

medianslidingwindow

(vector<

int>

& nums,

int k)

}else

}return ans;

}

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 位。你的任...

leetcode 480 滑動視窗中位數

目錄 一 題目內容 二 解題思路 三 中位數是有序序列最中間的那個數。如果序列的長度是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 2,3,4 中位數是 3 2,3 中位數是 2 3 2 2.5 給你乙個陣列 nums,有乙個長度為 k 的視窗從最左端滑動到最右端。視窗中有 k ...