面試經典150題——最小棧

?Life is a journey, there's no right or wrong.

a close up of a group of different colored powdered objects

1. 題目描述

image-20240304090421650

2. ?題目分析與解析

2.1 思路一

看到題目的一瞬間,有沒有注意到 常數時間內檢索到最小元素的棧,那說明我們肯定需要把最小元素的下標存儲起來,這樣才能在常數時間內找到。

其次因為它是一個棧,我們就需要定義一個數組,用來存儲棧內元素。根據棧的 先進后出的性質,需要指定兩個指針,用來指向棧的頭和尾。

代碼思路:

  1. 定義一個數組,定義兩個指針表示棧頭尾,定義一個指針表示最小元素的

  2. 初始化棧,初始大小及增長自定

  3. push操作將元素加入數組,并將尾指針后移1,同時比較當前元素和最小元素大小,取出最小的那個元素的下標更新表示最小元素的的指針

  4. pop操作將元素加入數組,并將尾指針前移1,同時比較pop的元素和最小元素大小,如果pop出的元素就是最小元素,那么遍歷數組找到新的最小值存儲在指針

  5. top操作取出尾指針指向的元素

  6. getMin直接返回最小元素下標的位置的值

  7. 注意因為數組長度不能固定,需要在push和pop時動態變化大小

因為題目提示了:

image-20240304091424126

,所以就直接定義數組為int類型。

(不瞞大家,因為兩行代碼的順序問題搞了一上午用python生成了測試用例才找到原因,就在這里記錄一下:

image-20240304132325747

順序問題啊,先拷貝再賦值,我之前先賦值再拷貝)

3. 代碼實現

3.1 思路一

image-20240304132431232

image-20240304132454172

4. 相關復雜度分析

時間復雜度分析:
  1. push(int val):

    • 擴容操作的時間復雜度為 O(N),其中 N 是當前棧中的元素個數。因為在擴容時需要將原數組中的元素拷貝到新數組中。

    • 更新棧頂指針、更新最小值的操作為 O(1)。

  2. pop():

    • 縮容操作的時間復雜度為 O(N),其中 N 是當前棧中的元素個數。因為在縮容時需要將原數組中的元素拷貝到新數組中。

    • 查找新的最小值的操作為 O(N),其中 N 是當前棧中的元素個數。因為需要遍歷棧中的元素以找到最小值。

    • 更新棧頂指針的操作為 O(1)。

  3. top() 和 getMin():

    • 這兩個方法的時間復雜度都為 O(1),因為它們只是簡單地返回棧頂元素和當前最小值,沒有涉及遍歷或其他復雜操作。

因此,總體來說,push、pop 操作的時間復雜度取決于棧中元素的數量,并且可能會觸發數組擴容和縮容,而這些操作的時間復雜度與元素數量成線性關系。

空間復雜度分析:

  1. elements數組的空間復雜度:

    • 最初創建時,數組的長度是 10,因此空間復雜度為 O(1)。

    • 隨著元素的增加、刪除以及數組的擴容和縮容,數組的空間會動態變化,但總體上考慮,空間復雜度為 O(N),其中 N 是棧中的元素個數。

綜上所述,時間復雜度取決于元素的數量,而空間復雜度隨著元素數量的增加而線性增加。

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

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

相關文章

網工學習 DHCP配置-接口模式

網工學習 DHCP配置-接口模式 學習DHCP總是看到,接口模式、全局模式、中繼模式。理解起來也不困難,但是自己動手操作起來全是問號。跟著老師視頻配置啥問題沒有,自己組建網絡環境配置就是不通,悲催。今天總結一下我學習接口模式的…

c++動態獲取工作路徑

最近在寫項目時遇到一個問題 pclrobot:~/cProject/projects/myPro/mpRPC$ ls autobuild.sh bin build CMakeLists.txt conf example lib log README.md src test如上所示,我的項目根目錄里有一個log文件夾和一個bin文件夾,我的需求是 bin目錄…

揭秘8.4k星開發者的秘密武器:it-tools在線工具集,你不可不知!

在IT的世界里,為了更好地發揮自己的才能,必須善用優秀的工具。深入挖掘IT-Tools的神奇力量,讓你的工作像魔法一般變得輕松高效!無論是自動化、監控還是問題解決,這些工具是我們事業成功的關鍵利器。選擇合適的IT工具&a…

PlantUML - 時序圖

時序圖主要內容 下面是一個簡單的時序圖,我們可以很容易并且美觀的表達我們的交互流程,只需要在箭頭的兩邊指定一個名字,加上描述即可: startuml bkloanapply -> bkloanapprove : request bkloanapprove --> bkloanapply :…

C++ map用法

int main() {void *p;str *st;st (str*)malloc(sizeof(str));st->a 23;st->b 24;p st;//使用void指針需強制類型轉換printf("%d\n%d\n",((str*)p)->a, ((str*)p)->b);free(st);map<char, int> mpci;mpci[m] 20;mpci.insert(pair<char, int…

#WEB前端(盒子模型)

1.實驗&#xff1a;盒子 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; margin&#xff08;外邊距&#xff09; border&#xff08;邊框&#xff09; padding&#xff08;內邊距&#xff09; 4.代碼&#xff1a; <!DOCTYPE html> <html lang"en"> &…

【C++】類與對象(static、explicit、友元、隱式類型轉換、內部類、匿名對象)

&#x1f308;個人主頁&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列專欄&#xff1a;http://t.csdnimg.cn/eCa5z 目錄 再談構造函數 初始化列表 隱式類型轉換 explicit關鍵字 static成員 概念 計算程序中創建出了多少個類…

開源軟件的商業模式探析:開放與盈利的平衡

寫在開頭 開源軟件的概念和應用已經成為了現代科技領域中的一個重要組成部分。然而&#xff0c;雖然開源軟件的價值和影響力得到了廣泛認可&#xff0c;但如何在開放的環境中找到商業盈利的平衡卻是一個頗具挑戰性的問題。本文將深入探討開源軟件的商業模式&#xff0c;從基本…

力扣61:旋轉鏈表

題目 給你一個鏈表的頭節點 head &#xff0c;旋轉鏈表&#xff0c;將鏈表每個節點向右移動 k 個位置。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,3,4,5], k 2輸出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 輸入&#xff1a;head [0,1,2], k 4輸出&#xff1a;…

卷積神經網絡(CNN)原理與實現

卷積神經網絡(CNN) 卷積神經網絡原理卷積神經網絡的數學推導卷積層反向傳播算法數學推導卷積層實現代碼 卷積神經網絡(CNN) 卷積神經網絡原理 卷積神經網絡是一種用于圖像、語音、自然語言等數據的深度學習模型&#xff0c;其核心思想是使用卷積操作提取輸入數據的特征&…

4、通達OA代碼審計

一、文件操作 1、文件上傳配合文件包含審計 文件上傳首先確定存在漏洞的文件。和文件上傳相關的函數比如upload。在從上到下分析構造的條件1. 從 POST 請求中提取變量 P 的值。 2. 檢查 P 是否已設置且不為空字符串。 3. 如果 P 已設置且非空&#xff0c;進入包含 "inc/…

JavaScript定義函數,創建函數實例時的內部原理

1、定義一個函數&#xff0c;JavaScript內部各做了哪些事情 定義一個函數時&#xff0c;JavaScript內部執行了以下步驟&#xff1a; 解析函數聲明: 當你定義一個函數時&#xff0c;JavaScript的解析器會首先解析函數聲明。這意味著它會檢查函數聲明的語法是否正確&#xff0c;…

[NSSCTF 2nd]MyJs

做一題ejs原型鏈污染 首先是登錄界面 源碼里面提示了源碼的路由 js不熟先審計一下 const express require(express); #導入Express框架&#xff0c;用于構建Web應用程序的服務器和路由 const bodyParser require(body-parser); #導入body-parser中間件&#xff0c;用于解析…

軟考證書=職稱證書?

官方的回答 根據《計算機技術與軟件專業技術資格&#xff08;水平&#xff09;考試暫行規定》&#xff08;國人部發〔2003〕39號&#xff09;規定&#xff0c;通過考試并獲得相應級別計算機專業技術資格&#xff08;水平&#xff09;證書的人員&#xff0c;表明其已具備從事相…

學習Android的第二十二天

目錄 Android ContextMenu 上下文菜單 ContextMenu 范例 參考文檔 Android SubMenu 子菜單 范例 參考文檔 Android PopupMenu 彈出菜單 范例 參考文檔 Android ContextMenu 上下文菜單 在Android開發中&#xff0c;ContextMenu&#xff08;上下文菜單&#xff09;為…

使用Javassist 在android運行時生成類

序言 最近在寫框架&#xff0c;有一個需求就是動態的生成一個類&#xff0c;然后查閱了相關文獻&#xff0c;發現在android中動態生成一個類還挺麻煩。因次把一些內容分享出來&#xff0c;幫助大家少走彎路。 方案一 DexMaker DexMaker 是一個針對 Android 平臺的庫&#xf…

Myqsort:基于冒泡排序算法的C語言實現

我們將詳細介紹一個基于冒泡排序算法的自定義排序函數——Mysqrt。該函數通過使用用戶提供的比較函數進行元素間的比較&#xff0c;并結合swap交換函數對任意類型的數據進行排序。下面是對代碼的逐行解析。 邏輯導圖 代碼實現 // 頭文件 #include<stdio.h>// 定義比較函…

華為自動駕駛技術詳解報告分享

ADS2.0首發搭載問界M5智駕版&#xff0c;城市NCA計劃年底全國開通。2023年4月16日華為在智能汽車解決方案發布會上發布了最新的ADS2.0產品&#xff0c;硬件數量減少至27個(11個攝像頭12個超聲波雷達3個毫米波雷達1個激光雷達,ADS1.0有34個)&#xff0c;車載計算平臺改為MDC610&…

python自學2

第一階段第三章 if&#xff0c;elif&#xff0c;else語句 這個是有順序的&#xff0c;如果第一個滿足下面的就不會執行&#xff0c;else也可以不寫&#xff0c;執行的效果等同于三個獨立的if。 還可以寫的更加簡潔一些 直接輸入的參數帶入到判斷里面去 小練習&#xff1a; 做…

打造專屬投屏體驗:Windows系統投屏到iOS系統

想要將電腦投屏共享給同事或朋友&#xff0c;又擔心隱私內容泄露&#xff1f;來來來&#xff0c;這里有妙招&#xff01; AirDroid Cast網頁版讓電腦投屏變得挑剔&#xff0c;只展示你允許共享的內容。會議資料、個人照片、敏感文件&#xff0c;都將得到嚴格的篩選&#xff0c;…