【代碼隨想錄算法訓練營——Day11】棧與隊列——150.逆波蘭表達式求值、239.滑動窗口最大值、347.前K個高頻元素

LeetCode題目鏈接
https://leetcode.cn/problems/evaluate-reverse-polish-notation/
https://leetcode.cn/problems/sliding-window-maximum/
https://leetcode.cn/problems/top-k-frequent-elements/

題解
150.逆波蘭表達式求值、
不能用tokens[i] >= "0" && tokens[i] <= "9"來判斷數字,因為會有三位數。被AI發現的bug。

239.滑動窗口最大值
拿到題目,經提示已經知道是用隊列。但是重要的是用隊列記錄什么。
看題解(視頻),維護一個單調隊列,由我們自己來實現,每次新加入一個元素到隊列里時,把前面所有小于其值的值都pop出隊列,維持隊列出口為當前窗口的最大值。
實現代碼的過程中,有一個不明白的點是,為什么當前維護的最大值不會是已經在窗口左側邊緣外的值?找到原因了,代碼寫的不是很對,要彈出窗口前面的那個值。
又改了兩個地方,一個是改成deque的實現,一個是新加入的值要與back()比較,如果比較的值更小要pop_back(),從尾部彈出,可以防止[3,1,2]以及其下一步的[1,2,0]這樣的隊列維護值發生。

347.前K個高頻元素
想了用hash來存,但排序會丟失下標的信息;再想到用map來存,但不好根據值排序。
看題解,發現用map排序行。于是寫了個下一回寫不出的代碼,主要是sort的cmp集成代碼,還有遍歷pair代碼也寫不出。感覺都是語法問題,寫幾次就會了。
接著看題解,語法也挺難,思路,要用到小頂堆,堆的數據結構和代碼沒怎么寫過,下回再補。

代碼

//150.逆波蘭表達式求值
#include <iostream>
#include <vector>
#include <string>
#include <stack>
using namespace std;class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> st;for (int i = 0;i < tokens.size();i++) {if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {int tmp1 = st.top();st.pop();int tmp2 = st.top();st.pop();if (tokens[i] == "+") st.push(tmp1 + tmp2);else if (tokens[i] == "-") st.push(tmp2 - tmp1);else if (tokens[i] == "*") st.push(tmp1 * tmp2);else st.push(tmp2 / tmp1);}else {st.push(stoi(tokens[i]));}}return st.top();}
};int main() {vector<string> tokens = { "10","6","9","3","+","-11","*","/","*","17","+","5","+" };Solution s;printf("%d", s.evalRPN(tokens));return 0;
}
//239.滑動窗口最大值
#include <iostream>
#include <vector>
#include <queue>
using namespace std;class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {vector<int> result;//queue<int> que;deque<int> que;for (int i = 0;i < k;i++) {/*while (!que.empty() && que.front() < nums[i]) {que.pop_front();}*/while (!que.empty() && nums[i] > que.back()) {que.pop_back();}que.push_back(nums[i]);}result.push_back(que.front());for (int i = k;i < nums.size();i++) {if (!que.empty() && nums[i - k] == que.front()) {que.pop_front();}/*while (!que.empty() && que.front() < nums[i]) {que.pop();}*/while (!que.empty() && nums[i] > que.back()) {que.pop_back();}que.push_back(nums[i]);result.push_back(que.front());}return result;}
};int main() {vector<int> nums = { 1,3,1,2,0,5 };int k = 3;Solution s;vector<int> result = s.maxSlidingWindow(nums, k);for (int i = 0;i < result.size();i++) {printf("%d ", result[i]);}return 0;
}
//347.前K個高頻元素
vector<int> topKFrequent(vector<int>& nums, int k) {map<int, int> hash;for(int i = 0;i < nums.size();i++){hash[nums[i]]++;}vector<pair<int, int>> tmp(hash.begin(), hash.end());sort(tmp.begin(), tmp.end(), [](const pair<int, int>& a, const pair<int, int>& b) {return a.second > b.second; // 按照值降序排列});vector<int> result;int num = 0;for(const auto& pair : tmp){if(num < k){result.push_back(pair.first);num++;}}return result;}

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

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

相關文章

Docker 容器化部署核心實戰——鏡像倉庫管理與容器多參數運行詳解

摘要&#xff1a; 在當今云原生技術迅速發展的背景下&#xff0c;Docker 已成為應用容器化的首選工具。本文作為“Docker 容器化部署核心實戰&#xff1a;從鏡像倉庫管理、容器多參數運行到 Nginx 服務配置與正反向代理原理解析”系列的第一篇&#xff0c;將深入探討 Docker 鏡…

ESP8266無法連接Jio路由器分析

我查了一下關于這些 Jio 路由器型號&#xff08;尤其是 JCOW414 和 JIDU6801&#xff09;的公開資料&#xff0c;下面是我能拿到的內容 對比這些型號可能帶來的問題&#xff0c;以及對你排障的補充建議。 路由器型號 & 公開已知特性 型號已知 / 可查特性和 ESP8266 的潛在…

傳智播客--MySQL

DAY01 MySQL入門 第一章 數據庫介紹 1.1 什么是數據庫 數據存儲的倉庫&#xff0c;本質上是一個文件系統&#xff0c;作用&#xff1a;方便管理數據的。 1.2 數據庫管理系統 數據庫管理系統&#xff08;DataBase Management System, DBMS&#xff09;&#xff1a;指一種操作和管…

[Dify] 實現“多知識庫切換”功能的最佳實踐

在構建知識驅動的問答系統或 AI 助手時,一個常見需求是:根據用戶問題所屬領域或上下文,切換使用不同的知識庫(Knowledge Base, KB)進行檢索。這樣可以提升回答的準確性、減少無關內容干擾,在多業務線或多主題應用中尤其有用。 本文將介紹: 為什么要做知識庫切換 Dify …

Jenkins運維之路(Jenkins流水線改造Day02-2-容器項目)

上篇文章中已經將絕大部分&#xff0c;Jenkins容器項目打包的相關功能改造完成了&#xff0c;這里在對構建部署后的告警類操作進行一些補充1.流水線告警1.1 安裝釘釘插件image-202509151111086851.2 配置釘釘插件image-20250915111235865image-202509151115328291.3 Pipeline釘…

64_基于深度學習的蝴蝶種類檢測識別系統(yolo11、yolov8、yolov5+UI界面+Python項目源碼+模型+標注好的數據集)

目錄 項目介紹&#x1f3af; 功能展示&#x1f31f; 一、環境安裝&#x1f386; 環境配置說明&#x1f4d8; 安裝指南說明&#x1f3a5; 環境安裝教學視頻 &#x1f31f; 二、數據集介紹&#x1f31f; 三、系統環境&#xff08;框架/依賴庫&#xff09;說明&#x1f9f1; 系統環…

N1ctf-2025-PWN-ez_heap近隊容器的禮儀

ez_heap 保護全開 程序邏輯&#xff1a; 讀入0x30的字符串&#xff0c;進行字符串校驗&#xff1a;以冒號為標志split&#xff0c;分成四份。最后輸入字符串形如&#xff1a; xor 0x111111111111111 validate badmin:p64(xor)b:Junior:111111創建0x180的chunk存放note 結構體…

縱深防御實踐:東方隱俠CI/CD安全體系構建全解析

前言:CI/CD安全的必要性 企業上云是近些年的潮流,但是風險如影隨形。之前有家電商平臺出了個大岔子——半夜自動發新版本的時候,因為流程里沒做安全檢查,直接導致系統故障,一天就損失了300多萬。這還不算完,某銀行測試人員通過未授權的自動發布流程把代碼推到了生產環境…

2025年滲透測試面試題總結-71(題目+回答)

安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 2. 滲透測試流程 & 內網滲透經驗 3. SQL注入報錯利用 4. XSS利用&#xff08;反射型/DOM型&#xff0…

基于Echarts+HTML5可視化數據大屏展示-茶園大數據平臺指揮艙

效果展示&#xff1a;代碼結構&#xff1a;主要代碼實現 index.html布局 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&quo…

華為網路設備學習-33(BGP協議 八)BGP路由 選路規則

一、目標與背景BGP路由特性&#xff1a;支持豐富的路徑屬性選路規則多樣注&#xff1a;在BGP路由表中最優選&#xff0c;不一定是路由表中的最優選。有可能存在靜態路由或者ospf路由等&#xff0c;其優先級高于BGP路由。二、選路規則概述從1到12&#xff0c;依次對比優先級。一…

深度學習(七):梯度下降

梯度下降&#xff08;Gradient Descent&#xff09;是深度學習中最核心的優化方法之一&#xff0c;它通過迭代更新模型參數&#xff0c;使得損失函數達到最小值&#xff0c;從而訓練出性能良好的神經網絡模型。 基礎原理 損失函數 在深度學習中&#xff0c;損失函數 L(θ) 是衡…

常見巖性分類與油氣勘探意義筆記

常見巖性分類與油氣勘探意義筆記 相關科普視頻可查看【說說巖石的分類-嗶哩嗶哩】 一、巖石基本分類體系 根據成因&#xff0c;自然界巖石可分為三大類&#xff0c;其中沉積巖與油氣勘探關系最為密切&#xff1a; 1. 火成巖&#xff08;巖漿巖&#xff09; 由巖漿冷卻凝固…

【Kubernetes】Tomcat 啟用 Prometheus 監控指標

之前出過一篇文章關于 “自定義監控指標實現業務 HPA 伸縮” &#xff0c;其中使用了 webapp 應用的指標數據&#xff08;JVM&#xff09;&#xff0c;接下來&#xff0c;這篇文章將介紹如何在通過 Tomcat 部署的 webapp 中啟用 Metrics 指標&#xff0c;一起來看看吧&#xf…

JVM 三色標記算法詳解!

目錄1. 什么是三色標記算法&#xff1f;三種顏色及其含義&#xff1a;2. 基礎三色標記算法流程 (非并發)3. 并發場景下的挑戰&#xff1a;一致性問題3.1. 漏標 (Missing Live Object) - 最嚴重的問題3.2. 錯標 (Floating Garbage) - 不那么嚴重的問題4. 屏障機制 (Barrier) - 解…

優化神經網絡模型以提升R2值至0.99的全面方案

優化神經網絡模型以提升R值至0.99的全面方案 1. 問題分析與背景 在深度學習項目中&#xff0c;提升模型的R&#xff08;決定系數&#xff09;值至0.99是一個具有挑戰性的目標&#xff0c;特別是在處理復雜的時間序列數據時。我們的現有模型結合了LSTM層、自注意力機制和MLP處理…

pgNow:一款免費的PostgreSQL監控與性能診斷工具

pgNow 是一款免費的桌面工具&#xff0c;可以為 PostgreSQL 數據庫提供快速集中的監控與性能診斷。 pgNow 不依賴代理&#xff0c;無需任何配置&#xff0c;可以幫助開發者或數據庫管理員&#xff08;DBA&#xff09;直觀地查看數據庫的統計信息和關鍵性能指標。 功能特性 跨平…

深入理解棧與隊列——從原理理解到實戰應用

目錄 一、引言 二、棧&#xff08;Stack&#xff09; 2.1 棧的基本概念 2.2 棧的使用 2.3 棧的模擬實現 2.4 棧的實戰應用 2.4.1 括號匹配 2.4.2 逆波蘭表達式求值 2.4.3 出棧入棧次序匹配 2.4.4 最小棧 三、隊列&#xff08;Queue&#xff09; 3.1 隊列的基本概念 …

用html5寫王者榮耀之王者墳墓的游戲2deepseek版

我將為您創建一個王者榮耀英雄墳墓游戲的提詞器HTML頁面。這個工具將幫助游戲主播或玩家在游戲中快速查看英雄技能、連招順序等信息。設計思路 創建英雄選擇界面實現提詞器顯示區域&#xff0c;可自定義文本內容添加字體大小、滾動速度控制設計符合王者榮耀風格的UI下面是…

輕閱讀:一鍵解決瀏覽器無法預覽Office文檔的實用方案

在日常辦公中&#xff0c;通過瀏覽器直接打開Word、Excel或PPT等文檔時&#xff0c;常遇到“需下載后用本地軟件打開”的困擾&#xff0c;不僅流程繁瑣&#xff0c;還面臨格式兼容、設備存儲不足等問題。輕閱讀&#xff08;QingYueDu&#xff09;作為一款輕量級文件在線預覽工具…