代碼隨想錄27期|Python|Day13|棧與隊列|239. 滑動窗口最大值 (一刷至少需要理解思路)|347.前 K 個高頻元素 (一刷至少需要理解思路)

239. 滑動窗口最大值

單調隊列

滑動窗口中的隊列一直保持出口大,入口小的順序。(圖:代碼隨想錄)

1、每次有新的元素進入(也就是滑動窗口移動后),都需要先和入口的元素比較大小,如果大,就從隊尾pop出之前的元素(雙向隊列的特性),如果小,則保留。

2、每次需要pop隊列頭部的元素,需要先和當前隊列的頭部元素比較,只pop滑動窗口即將舍棄的值

from collections import dequeclass MyQueue:"""雙向隊列dequeue始終保持隊列頭部pop()為最大值,尾部push()為最小值pop<-- [0] [1] [-1] <--pushmax mid min"""def __init__(self):self.queue = deque()def pop(self, value):# 如果隊列非空而且需要pop的值恰好就是隊頭的數值if self.queue and value == self.queue[0]:self.queue.popleft()def push(self, value):# 如果隊列非空,而且需要push進入的值比隊尾的值都大,那么隊尾就一直pop出去while self.queue and value > self.queue[-1]:self.queue.pop()self.queue.append(value)def getMax(self):# 始終保持頭部是最大值,返回隊列頭部就是最大值return self.queue[0]class Solution(object):def maxSlidingWindow(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""queue = MyQueue()ans = []# 先儲存前k個數值,保證隊列非空for i in range(k):queue.push(nums[i])ans.append(queue.getMax())# 然后遍歷nums數組for i in range(k, len(nums)):queue.pop(nums[i - k])queue.push(nums[i])ans.append(queue.getMax())return ans

347. 前 K 個高頻元素???????

大頂堆:根節點是最大值,先pop的是最大值

小頂堆:根節點是最小值,先pop的是最小值

所以只需要按照出現頻率排序放入小頂堆,然后pop直到還剩k個元素,再按照倒序輸出即可。

優先級隊列法

1、首先遍歷數組建立map鍵值對;

2、建立小頂堆,按照從大到小的順序放入鍵值對,當隊列的長度大于k的時候,開始從最小值節點pop元素,留下k個最大值;

3、倒序輸出最大值對應的key即可。

class Solution(object):def topKFrequent(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""# 獲取鍵值對map_freq = {}  # (key, value) = ('a', 4), ('b', 3) ...for item in nums:map_freq[item] = map_freq.get(item, 0) + 1  # 注意get寫法# 構造小頂堆prime_que = []  # 創建優先級隊列(這里是小頂堆)"""heapq用法:heapq.heappush()是往堆中添加新值heapq.heappop()是從堆的根節點彈出值,大頂堆彈出最大值,小頂堆彈出最小值"""for key, value in map_freq.items():heapq.heappush(prime_que, (value, key))  # 先入的是最大值if len(prime_que) > k:heapq.heappop(prime_que)res = [0] * k# 倒序輸出for i in range(k-1, -1, -1):res[i] = heapq.heappop(prime_que)[1]return res

注意構造小頂堆的方式:heapq

heapq用法:

heapq.heappush()是往堆中添加新值

heapq.heappop()是從堆的根節點彈出值,大頂堆彈出最大值,小頂堆彈出最小值

?第13天完結🎉

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215497.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215497.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215497.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

BDD100K數據集

官網:BDD100K (vis.xyz)????? 論文&#xff1a;[1805.04687] BDD100K: A Diverse Driving Dataset for Heterogeneous Multitask Learning (arxiv.org) github:bdd100k/bdd100k: Toolkit of BDD100K Dataset for Heterogeneous Multitask Learning - CVPR 2020 Oral Pap…

特發性震顫會導致其他并發癥嗎?

特發性震顫是一種較為常見的神經系統疾病&#xff0c;其主要癥狀是姿勢性震顫&#xff0c;常常在手部開始&#xff0c;并可逐漸累及頭部、下肢等其他部位。雖然特發性震顫的主要癥狀是震顫&#xff0c;但該病也可能導致其他并發癥。下面將詳細介紹特發性震顫可能引起的并發癥。…

靈茶 - 2023 - 12 - 12

鏈接 Problem - 620C - Codeforces 思路 : 貪心 : 對于每一段區間&#xff0c;從前往后貪&#xff0c;如果前面一段區間有重復數字&#xff0c;那么就直接合并成答案的一段區間&#xff0c;然后繼續尋找下一段區間&#xff0c;對于最后一段&#xff0c;如果沒有匹配的話&am…

自定義kafka客戶端消費topic

文章目錄 自定義kafka客戶端消費topic結論1 背景2 spring集成2.1.8.RELEASE版本不支持autoStartup屬性3 自定義kafka客戶端消費topic3.1 yml配置3.2 KafkaConfig客戶端配置3.3 手動啟動消費客戶端 自定義kafka客戶端消費topic 結論 使用自定義的KafkaConsumer給spring進行管理…

人體關鍵點檢測2:Pytorch實現人體關鍵點檢測(人體姿勢估計)含訓練代碼

人體關鍵點檢測2&#xff1a;Pytorch實現人體關鍵點檢測(人體姿勢估計)含訓練代碼 目錄 人體關鍵點檢測2&#xff1a;Pytorch實現人體關鍵點檢測(人體姿勢估計)含訓練代碼 1. 前言 2.人體關鍵點檢測方法 (1)Top-Down(自上而下)方法 (2)Bottom-Up(自下而上)方法&#xff1…

Android - 分區存儲 MediaStore、SAF

官方頁面 參考文章 一、概念 分區存儲&#xff08;Scoped Storage&#xff09;的推出是針對 APP 訪問外部存儲的行為&#xff08;亂建亂獲取文件和文件夾&#xff09;進行規范和限制&#xff0c;以減少混亂使得用戶能更好的控制自己的文件。 公有目錄被分為兩大類&#xff1a;…

會員運營常用的ChatGPT通用提示詞模板

會員體系&#xff1a;如何建立和完善會員體系&#xff1f; 會員等級&#xff1a;如何設定會員等級及權益&#xff1f; 會員留存&#xff1a;如何提高會員留存率&#xff1f; 會員活躍度&#xff1a;如何提高會員活躍度&#xff1f; 會員招募&#xff1a;如何招募新會員&…

ubuntu install sqlmap

refer: https://github.com/sqlmapproject/sqlmap 安裝sqlmap&#xff0c;可以直接使用git 克隆整個sqlmap項目&#xff1a; git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev 2.然后進入sqlmap-dev&#xff0c;使用命令&#xff1a; python s…

靜態代理IP搭建步驟,靜態匿名在線代理IP如何使用?

靜態代理搭建步驟 1. 確定需求 在搭建靜態代理之前&#xff0c;需要明確自己的需求&#xff0c;包括代理服務器的位置、訪問速度、匿名性、安全性等方面的要求。 2. 選擇代理服務器提供商 可以選擇自己購買服務器搭建代理&#xff0c;也可以選擇使用云服務提供商的代理服務…

【Python百寶箱】探索強化學習算法的利器:航行在AI之海的羅盤指南

強化學習的工具寶盒&#xff1a;探索各色瑰寶&#xff0c;點亮智能之旅 前言 人工智能和強化學習正成為推動科技進步的重要力量。在這個領域中&#xff0c;使用適當的庫和工具可以加速算法研發和應用部署的過程。本文將深入探索一系列具有代表性的強化學習庫和工具&#xff0…

有趣的數學 用示例來闡述什么是初值問題二

一、示例 解決以下初值問題。 解決這個初始值問題的第一步是找到一個通用的解決方案。為此&#xff0c;我們找到微分方程兩邊的反導數。 即 我們能夠對兩邊進行積分&#xff0c;因為y項是單獨出現的。請注意&#xff0c;有兩個積分常數&#xff1a;C1和C2。求解前面的方程y給出…

電工--半導體器件

目錄 半導體的導電特性 PN結及其單向導電性 二極管 穩壓二極管 雙極型晶體管 半導體的導電特性 本征半導體&#xff1a;完全純凈的、晶格完整的半導體 載流子&#xff1a;自由電子和空穴 溫度愈高&#xff0c;載流子數目愈多&#xff0c;導電性能就愈好 型半導體&…

28. Python Web 編程:Django 基礎教程

目錄 安裝使用創建項目啟動服務器創建數據庫創建應用創建模型設計路由設計視圖設計模版 安裝使用 Django 項目主頁&#xff1a;https://www.djangoproject.com 訪問官網 https://www.djangoproject.com/download/ 或者 https://github.com/django/django Windows 按住winR 輸…

docker build構建報錯:shim error: docker-runc not installed on system

問題&#xff1a; docker構建鏡像時報錯&#xff1a;shim error: docker-runc not installed on system 解決&#xff1a; ln -s /usr/libexec/docker/docker-runc-current /usr/bin/docker-runc

MySQL數據庫——鎖-表級鎖(表鎖、元數據鎖、意向鎖)

目錄 介紹 表鎖 語法 特點 元數據鎖 介紹 演示 意向鎖 介紹 分類 演示 介紹 表級鎖&#xff0c;每次操作鎖住整張表。鎖定粒度大&#xff0c;發生鎖沖突的概率最高&#xff0c;并發度最低。應用在MyISAM、InnoDB、BDB等存儲引擎中。 對于表級鎖&#xff0c;主要…

選擇排序和堆排序

目錄 前言 一.選擇排序 1.思想 2.實現 3.特點 二.堆排序 1.思想 2.實現 3.特點 前言 排序算法是計算機科學中的基礎工具之一&#xff0c;對于數據處理和算法設計有著深遠的影響。了解不同排序算法的特性和適用場景&#xff0c;能夠幫助程序員在特定情況下…

【Go】基于GoFiber從零開始搭建一個GoWeb后臺管理系統(一)搭建項目

前言 最近兩個月一直在忙公司的項目&#xff0c;上班時間經常高強度寫代碼&#xff0c;下班了只想躺著&#xff0c;沒心思再學習、做自己的項目了。最近這幾天輕松一點了&#xff0c;終于有時間 摸魚了 做自己的事了&#xff0c;所以到現在我總算是搭起來一個比較完整的后臺管…

nrfutil工具安裝

準備工作&#xff0c;下載相關安裝包 鏈接&#xff1a;https://pan.baidu.com/s/1LWxhibf8LiP_Cq3sw0kALQ 提取碼&#xff1a;2dlc 解壓后&#xff0c;分別安裝以下安裝包 在C盤下創建目錄nordic_tools&#xff0c;并將nrfutil復制到剛創建的目錄下 環境變量path下添加C:\nor…

圖像采集卡 Xtium?2-XGV PX8支持高速 GigE Vision 工業相機

圖像采集卡&#xff08;Image Capture Card&#xff09;&#xff0c;又稱圖像捕捉卡&#xff0c;是一種可以獲取數字化視頻圖像信息&#xff0c;并將其存儲和播放出來的硬件設備。很多圖像采集卡能在捕捉視頻信息的同時獲得伴音&#xff0c;使音頻部分和視頻部分在數字化時同步…

python elasticsearch 日期聚合

索引以及數據如下 PUT dateagg {"mappings": {"properties": {"charge":{"type": "double"},"types":{"type": "keyword"},"create_date":{"type": "date",&…