day 10 | 232.用棧實現隊列、 225. 用隊列實現棧

目錄:

解題及思路學習

232.用棧實現隊列

https://leetcode.cn/problems/implement-queue-using-stacks/

模擬題,用兩個棧來實現隊列的功能。

class MyQueue {
public:stack<int> stIn;stack<int> stOut;/** Initialize your data structure here. */MyQueue() {}/** Push element x to the back of queue. */void push(int x) {stIn.push(x);}/** Removes the element from in front of queue and returns that element. */int pop() {// 只有當stOut為空的時候,再從stIn里導入數據(導入stIn全部數據)if (stOut.empty()) {// 從stIn導入數據直到stIn為空while(!stIn.empty()) {stOut.push(stIn.top());stIn.pop();}}int result = stOut.top();stOut.pop();return result;}/** Get the front element. */int peek() {int res = this->pop(); // 直接使用已有的pop函數stOut.push(res); // 因為pop函數彈出了元素res,所以再添加回去return res;}/** Returns whether the queue is empty. */bool empty() {return stIn.empty() && stOut.empty();}
};
  • 時間復雜度: push和empty為O(1), pop和peek為O(n)
  • 空間復雜度: O(n)

項目開發中,代碼復用很重要。

一定要懂得復用,功能相近的函數要抽象出來,不要大量的復制粘貼,很容易出問題!(踩過坑的人自然懂)

工作中如果發現某一個功能自己要經常用,同事們可能也會用到,自己就花點時間把這個功能抽象成一個好用的函數或者工具類,不僅自己方便,也方便了同事們。

同事們就會逐漸認可你的工作態度和工作能力,自己的口碑都是這么一點一點積累起來的!在同事圈里口碑起來了之后,你就發現自己走上了一個正循環,以后的升職加薪才少不了你!

225.?用隊列實現棧

https://leetcode.cn/problems/implement-stack-using-queues/

用兩個隊列來模擬棧,只不過沒有輸入和輸出的關系,而是另一個隊列完全用來備份的!

如下面動畫所示,用兩個隊列que1和que2實現隊列的功能,que2其實完全就是一個備份的作用,把que1最后面的元素以外的元素都備份到que2,然后彈出最后面的元素,再把其他元素從que2導回que1。

class MyStack {
public:queue<int> que1;queue<int> que2; // 輔助隊列,用來備份/** Initialize your data structure here. */MyStack() {}/** Push element x onto stack. */void push(int x) {que1.push(x);}/** Removes the element on top of the stack and returns that element. */int pop() {int size = que1.size();size--;while (size--) { // 將que1 導入que2,但要留下最后一個元素que2.push(que1.front());que1.pop();}int result = que1.front(); // 留下的最后一個元素就是要返回的值que1.pop();que1 = que2;            // 再將que2賦值給que1while (!que2.empty()) { // 清空que2que2.pop();}return result;}/** Get the top element. */int top() {return que1.back();}/** Returns whether the stack is empty. */bool empty() {return que1.empty();}
};
  • 時間復雜度: push為O(n),其他為O(1)
  • 空間復雜度: O(n)

優化:隊列模擬棧,其實一個隊列就夠了。

一個隊列在模擬棧彈出元素的時候只要將隊列頭部的元素(除了最后一個元素外) 重新添加到隊列尾部,此時再去彈出元素就是棧的順序了。

class MyStack {
public:queue<int> que;/** Initialize your data structure here. */MyStack() {}/** Push element x onto stack. */void push(int x) {que.push(x);}/** Removes the element on top of the stack and returns that element. */int pop() {int size = que.size();size--;while (size--) { // 將隊列頭部的元素(除了最后一個元素外) 重新添加到隊列尾部que.push(que.front());que.pop();}int result = que.front(); // 此時彈出的元素順序就是棧的順序了que.pop();return result;}/** Get the top element. */int top() {return que.back();}/** Returns whether the stack is empty. */bool empty() {return que.empty();}
};
  • 時間復雜度: push為O(n),其他為O(1)
  • 空間復雜度: O(n)

復盤總結

個人反思

很多算法題目主要是對知識點的考察和教學意義遠大于其工程實踐的意義,所以面試題也是這樣!

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

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

相關文章

HCIP學習--BGP3

目錄 前置內容 BGP下一跳的修改問題 BGP的屬性 配置 PrefVal權重屬性 負載分擔 LocPrf 負載分擔 NextHop AS-PATH Ogn 配置 MED 配置 BGP選路規則 BGP的社團屬性 配置及解釋 前置內容 HCIP學習--BGP1_板栗妖怪的博客-CSDN博客 HCIP學習--BGP2_板栗妖怪的博客…

031_小馳私房菜_MTK平臺Camera基本流程,日志信息打印

這篇文章主要介紹mtk平臺,camera基本流程的日志信息打印。針對下面幾點展開: 一) camera打開流程; 二) 幀請求 && 幀回調; 三) 拍照; MTK平臺camera模塊,如果想要打開更多日志,一般需要先設置 adb shell setprop "vendor.debug.camera.log" 1 然后…

STM32控制SG90舵機原理及代碼

STM32控制SG90舵機原理及代碼 一.SG90舵機原理二.控制SG90舵機三.代碼實例3.1 配置定時器3.2 main 函數 四.實驗現象 一.SG90舵機原理 舵機的運用還是比較廣泛的&#xff0c;那么舵機工作原理是什么呢&#xff0c;一般來說我們給舵機一個信號他就能工作了&#xff0c;那么這個…

00 - 環境配置

查看所有文章鏈接&#xff1a;&#xff08;更新中&#xff09;GIT常用場景- 目錄 文章目錄 1. 環境說明2. 安裝配置2.1 配置user信息2.2 config的三個作用域 3. 建git倉庫3.1 把已有的項目代碼納入git管理3.2 新建的項目直接用git管理3.3 配置local的user和email3.4 優先級&…

Redis_緩存1_緩存類型

14.redis緩存 14.1簡介 穿透型緩存&#xff1a; 緩存與后端數據交互在一起&#xff0c;對服務端的調用隱藏細節。如果從緩存中可以讀到數據&#xff0c;就直接返回&#xff0c;如果讀不到&#xff0c;就到數據庫中去讀取&#xff0c;從數據庫中讀到數據&#xff0c;也是先更…

股票指數——RSI指數

RSI指數的計算非常簡單&#xff0c;就是使用一段時間內的平均上漲除以平均上漲加平均下跌&#xff08;取正值&#xff09;。也就意味著RSI指數的取值是[0,100]之間&#xff0c;其中0表示周期內沒有上漲的&#xff0c;100表示周期內沒有下跌的。RSI的直觀意義是它表示了一段周期…

學習筆記整理-JS-06-函數

一、函數基本使用 1. 什么是函數 函數就是語句的封裝&#xff0c;可以讓這些代碼方便地被復用。函數具有"一次定義&#xff0c;多次調用"的優點。使用函數&#xff0c;可以簡化代碼&#xff0c;讓代碼更具有可讀性。 2. 函數的定義和調用 和變量類似&#xff0c;函…

Jupyter并發測試以后出現EOFError marshal data too short

Jupyter 并發測試以后出現EOFError: marshal data too short 背景 由于項目需求需要用戶能進行網頁在線運行python代碼程序&#xff0c;調研后決定使用Jupyter的服務接口實現此功能&#xff0c;目前使用docker進行容器化部署&#xff0c;測試針對次服務進行并發測試。測試并發…

JimuReport積木報表 v1.6.0版本發布—免費的可視化報表

項目介紹 一款免費的數據可視化報表&#xff0c;含報表和大屏設計&#xff0c;像搭建積木一樣在線設計報表&#xff01;功能涵蓋&#xff0c;數據報表、打印設計、圖表報表、大屏設計等&#xff01; Web 版報表設計器&#xff0c;類似于excel操作風格&#xff0c;通過拖拽完成報…

開源代碼分享(13)—整合本地電力市場與級聯批發市場的投標策略(附matlab代碼)

1.引言 1.1摘要 本地電力市場是在分配層面促進可再生能源的效率和使用的一種有前景的理念。然而&#xff0c;作為一個新概念&#xff0c;如何設計和將這些本地市場整合到現有市場結構中&#xff0c;并從中獲得最大利潤仍然不清楚。在本文中&#xff0c;我們提出了一個本地市場…

中睿天下Coremail | 2023年第二季度企業郵箱安全態勢觀察

今日&#xff0c;中睿天下聯合Coremail郵件安全發布《2023第二季度企業郵箱安全性研究報告》&#xff0c;對2023第二季度和2023上半年的企業郵箱的安全風險進行了分析。 一 垃圾郵件同比下降16.38% 根據監測&#xff0c;2023年Q2垃圾郵件數量達到6.47億封&#xff0c;環比下降…

003-Spring boot 啟動流程分析

目錄 啟動流程分析創建 SpringApplication啟動 run(String... args) 啟動流程分析 SpringApplication.run(App.class, args);return new SpringApplication(primarySources).run(args);創建 SpringApplication SpringApplication(primarySources):this.primarySources new L…

opencv圖片灰度二值化

INCLUDEPATH D:\work\opencv_3.4.2_Qt\include LIBS D:\work\opencv_3.4.2_Qt\x86\bin\libopencv_*.dll #include <iostream> #include<opencv2/opencv.hpp> //引入頭文件using namespace cv; //命名空間 using namespace std;//opencv這個機器視…

Springloc和aop的基礎概念

什么是控制反轉和依賴注入&#xff1f; 控制反轉(IoC)和依賴注入(DI)是軟件開發中常用的編程范式&#xff0c; 它們極大地提高了代碼可維護性和可復用性&#xff0c;簡化了代碼結構。 什么是控制反轉(IoC) 控制反轉是- - 種編程模式&#xff0c;它將應用程序中的控制權轉移到…

使用 SSL/TLS 加強 MQTT 通信安全

在之前的文章中&#xff0c;我們探討了認證和訪問控制機制。接下來&#xff0c;我們將介紹傳輸層安全協議&#xff08;TLS&#xff09;在提升 MQTT 通信安全方面的重要作用。本文將著重介紹 TLS 以及它如何保證 MQTT 通信的完整性、機密性和真實性。 概念解釋 在開始之前&…

TypeScript項目中Axios的封裝

目錄 前言 一、axios中的常見類型 1. AxiosInstance 2. AxiosRequestConfig 3. AxiosResponse 4. AxiosError 二、axios封裝步驟 三、封裝后的完整代碼 1. 基礎封裝 2. 高級封裝 前言 為了實現統一的網絡請求處理和管理&#xff0c;在日常開發中我們常常封裝 axios&…

TiDB v7.1.0 跨業務系統多租戶解決方案

本文介紹了 TiDB 數據庫的資源管控技術&#xff0c;并通過業務測試驗證了效果。資源管控技術旨在解決多業務共用一個集群時的資源隔離和負載問題&#xff0c;通過資源組概念&#xff0c;可以限制不同業務的計算和 I/O 資源&#xff0c;實現資源隔離和優先級調度&#xff0c;提高…

Patch SCN一鍵解決ORA-600 2662故障---惜分飛

客戶強制重啟庫之后,數據庫啟動報ORA-600 2037,ORA-745 kcbs_reset_pool/kcbzre1等錯誤 Wed Aug 09 13:25:38 2023 alter database mount exclusive Successful mount of redo thread 1, with mount id 1672229586 Database mounted in Exclusive Mode Lost write protection d…

題目:2553.分離數組中數字的數位

??題目來源&#xff1a; leetcode題目&#xff0c;網址&#xff1a;2553. 分割數組中數字的數位 - 力扣&#xff08;LeetCode&#xff09; 解題思路&#xff1a; 倒序放置數組中數位&#xff0c;然后再反轉即可。 解題代碼&#xff1a; class Solution {public int[] sepa…

區分等待、阻塞,加拓展

在java中&#xff0c;很多時候我們忽略的基本的知識&#xff0c;這是很致命的&#xff0c;只有搞懂Thread的基礎知識&#xff0c;才能進一步探索&#xff1a;reentrantLock&#xff0c;AQS等。 1&#xff1a;Thread的線程狀態到底有幾種&#xff1f; 6種&#xff1a; public…