中位數是有序序列最中間的那個數。如果序列的長度是偶數,則沒有最中間的數;此時中位數是最中間的兩個數的平均數。
例如:[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,-1,-1,3,5,6]。--------------- -----
[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
你可以假設 k 始終有效,即:k 始終小於等於輸入的非空陣列的元素個數。【解析】與真實值誤差在 10 ^ -5 以內的答案將被視作正確答案
需要設計乙個「資料結構」,用來維護滑動視窗,並且需要提供如下的三個介面:
insert(num):將乙個數num 加入資料結構;
erase(num):將乙個數 num 移出資料結構;
getmedian():返回當前資料結構中所有數的中位數
class dualheap
private:
// 不斷地彈出 heap 的堆頂元素,並且更新雜湊表
templatevoid prune(t& heap)
heap.pop();
}else }}
// 調整 small 和 large 中的元素個數,使得二者的元素個數滿足要求
void makebalance()
else if (smallsize < largesize)
}public:
void insert(int num)
else
makebalance();
}void erase(int num)
}else
}makebalance();
}double getmedian()
};class solution
vectorans = ;
for (int i = k; i < nums.size(); ++i)
return ans;
}};
滑動視窗中位數
中位數是有序序列最中間的那個數。如果序列的長度是偶數,則沒有最中間的數 此時中位數是最中間的兩個數的平均數。例如 給你乙個陣列 nums,有乙個長度為 k 的視窗從最左端滑動到最右端。視窗中有 k 個數,每次視窗向右移動 1 位。你的任務是找出每次視窗移動後得到的新視窗中元素的中位數,並輸出由它們組...
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 位。你的任...