日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)

發布時間:2024/7/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

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

例如:
[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]。提示: 你可以假設 k 始終有效,即:k 始終小于輸入的非空數組的元素個數。 與真實值誤差在 10 ^ -5 以內的答案將被視作正確答案。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sliding-window-median
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

類似題目:
LeetCode 295. 數據流的中位數(大小堆)
LeetCode 703. 數據流中的第K大元素(優先隊列)

參考我的博客 數據結構 堆(優先隊列)
參考大小堆的思想,一個堆最多比另一個堆最多多一個元素,不再多講,請參考上面鏈接

  • 關鍵要實現從堆中刪除窗口左端點,那么用 set 來當做堆就可以突破優先隊列(堆)不能刪除非堆頂元素
  • 本題:小堆size = 大堆size or 小堆size = 大堆size+1
  • k 為 奇數,直接返回小堆頂 set.begin()
  • k 為 偶數,返回兩個堆頂的平均值
class Solution { // C++multiset<int> minheap;//begin 是小的元素multiset<int,greater<int>> maxheap;//begin 是大的元素 public:vector<double> medianSlidingWindow(vector<int>& nums, int k) {// k = 1,直接返回數組if(k == 1) return vector<double>(nums.begin(), nums.end());int n = nums.size(), i = 0, j = 0, idx = 0;long a, b;//避免溢出 longvector<double> ans(n-k+1);for( ; j < k; ++j)maxheap_minheap_add(nums[j]);//先加入k個a = (*maxheap.begin()), b = (*minheap.begin());ans[idx++] = (k&1) ? b : (a+b)/2.0;//記錄中位數for(i = 0 ; j < n; ++i,++j){maxheap_minheap_del(nums[i]);//刪除左端點maxheap_minheap_add(nums[j]);//加入右端點a = (*maxheap.begin()), b = (*minheap.begin());ans[idx++] = (k&1) ? b : (a+b)/2.0;//記錄中位數}return ans;}void maxheap_minheap_add(int x){if(minheap.empty())minheap.insert(x);else if(maxheap.size() == minheap.size()){if(x >= *maxheap.begin())minheap.insert(x);else{minheap.insert(*maxheap.begin());maxheap.erase(maxheap.begin());maxheap.insert(x);}}else if(maxheap.size() < minheap.size()){if(x <= *minheap.begin())maxheap.insert(x);else{maxheap.insert(*minheap.begin());minheap.erase(minheap.begin());minheap.insert(x);}}}void maxheap_minheap_del(int x){if(maxheap.size() < minheap.size()){auto it = minheap.find(x);if(it != minheap.end())minheap.erase(it);else{maxheap.erase(maxheap.find(x));maxheap.insert(*minheap.begin());minheap.erase(minheap.begin());}}else if(maxheap.size() == minheap.size()){auto it = maxheap.find(x);if(it != maxheap.end())maxheap.erase(it);else{minheap.erase(minheap.find(x));minheap.insert(*maxheap.begin());maxheap.erase(maxheap.begin());}}} };

108 ms 18.9 MB

總結

以上是生活随笔為你收集整理的LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天堂无乱码 | 欧美精品手机在线 | 亚洲一区不卡在线 | 看全黄大色黄大片美女人 | 国产乱人乱偷精品视频 | av在线不卡一区 | 久久伊人中文字幕 | 欧美一级在线观看视频 | 天堂网va| 欧美在线黄 | 精品国产二区三区 | 中文字幕欧美另类精品亚洲 | 91麻豆视频| 国产suv精品一区二区6 | 国产第四页 | 综合精品在线 | 东北少妇bbbb搡bbb搡 | 精品一区二区免费 | 999免费| 欧美成人精精品一区二区频 | 制服诱惑一区 | 国产亚洲精品久久久久动 | 亚洲伦理精品 | 欧美日韩久久精品 | 中文字幕日韩在线观看 | 美日韩精品 | 国产精品久久久久久人妻精品动漫 | 日韩aⅴ视频 | 99久久香蕉 | 亚洲天堂网在线观看视频 | 国产日韩精品一区二区三区在线 | 国产粉嫩在线 | 狂野欧美性猛交xxⅹ李丽珍 | 精品国产丝袜一区二区三区乱码 | 国产图片一区 | 国产精品18 | 欧美亚洲日本 | 亚洲av久久久噜噜噜噜 | √天堂资源在线 | 久草一本 | 免费看欧美片 | 99热播精品 | 免费麻豆国产一区二区三区四区 | av综合导航| 九草在线观看 | 亚洲精品女人久久久 | 久久综合国产 | 欧美日韩亚洲色图 | 男人天堂网址 | 中文日韩 | 毛片毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 国产精品成人久久久久久久 | 婷婷亚洲综合五月天小说 | 日本成人社区 | 在线观看sm| 伊人av一区 | 日韩av综合在线 | 亚洲精品一区二区 | av片久久 | 全程偷拍露脸中年夫妇 | 另类欧美亚洲 | 一级理论片 | 免费毛片一区二区三区 | 国产精品一区二区三区久久久 | 欧洲免费毛片 | 亚洲图区欧美 | 激情的网站 | 又污又黄的网站 | 国产日韩欧美综合在线 | 金瓶风月在线 | 亚洲第一成年人网站 | 亚洲精品av在线 | 亲切的金子片段 | 国产又粗又硬视频 | 在线中文一区 | 欧美国产成人精品一区二区三区 | 欧美性大战xxxxx久久久 | 五月婷综合| 精品黄色在线观看 | 成人在线视频一区二区 | 久久色视频 | av特黄| 欧美aa| h网站在线观看 | 中文字幕乱码一区二区三区 | 国外亚洲成av人片在线观看 | av福利院| 亚洲国产精品视频 | 五月花婷婷 | 日本大胆人体视频 | 黑丝一区 | 艳妇臀荡乳欲伦交换gif | 日韩蜜桃视频 | 欧美日韩日本国产 | 牛牛影视av | 伊人亚洲影院 | yy1111111| 国产成人一区二区三区影院在线 | 久久久久亚洲av无码专区 |