最小棧 Momenta2019秋招技術崗筆試題

2021-10-03 14:11:08 字數 1023 閱讀 2755

實現乙個最小棧,有三種操作,min:得到棧中的最小值,push:在棧頂插入乙個元素,pop:彈出棧頂元素,使這三種操作的時間複雜度都是o(1)

要求:語言不限

第一行是乙個數q,接下來q行每行表示乙個操作,每行首先是操作op

若op=0,則輸出當前棧中的最小值;

若op=1,表示push,接著正整數x,把在x放進棧頂;

若op=2,表示pop,彈出棧頂元素

保證q<=500000,保證op=0或2時(即min操作和pop操作時)棧不為空。

你可以假設一開始棧的空的。

對應每個op=0或2,如果是op=0輸出當前棧中的最小值,如果是op==2輸出彈出的元素。輸入7

1 31 4

01 202

0輸出32

23說明第乙個操作為push 3,此時棧元素為3

第二個操作為push 4,此時棧元素為3,4

第三個操作為min,此時棧元素為3,4,輸出最小值3

第四個操作為push 2,此時棧元素為3,4,2

第五個操作為min,此時棧元素為3,4,2,輸出最小值2

第六個操作為pop,彈出元素2,此時棧元素為3,4,輸出彈出的元素2

第七個操作為min,此時棧元素為3,4,輸出最小值3

這個題目的解題思路比較的清晰,需要明確的是要用到兩個棧,stack1用來進行正常的壓入彈出操作,stack2用來進行最小值的彈出。但是需要注意的是以下要點:

1.stack2中的元素,stack1中都有,因此如果要輸出最小值,要在stack1和stack2中分別進行彈出棧的操作。

2.在最小值元素進行更新的時候要注意,最小值始終要保持為stack2的棧頂元素。

c++**如下:

#include

using

namespace std;

intmain()

else

if(op==1)

else

if(op==2)

}return0;

}

2023年秋招 京東測試開發崗

1.下列程式的執行後的結果為 include using namespace std int foo int n int main 3.原二叉樹先序遍歷為 30,24,15,27,29,46 根左右 中序遍歷為 15,24,27,29,30,46 左根右 求其轉換為平衡二叉樹後的後序遍歷結果。4.t...

面經 經驗分享 2019秋招演算法崗覆盤

輸出 存在這個數,則輸出這個數。不存在這個數,則輸出false。輸出 輸出一行,輸出前k大的數,每個數字用逗號隔開。簡歷的重要性在找工作中不言而喻,乙份好的簡歷能讓面試官迅速對你產生好感,也為接下來的面試提供方便,所以一定要認真寫好自己的簡歷,每次面試時不管公司那邊有沒有通知帶簡歷,都一定要帶上自己...

C C 秋 春招技術崗面試基礎 深淺拷貝

c 的拷貝方式 介紹了深淺拷貝的區別 先看一下下面的 c vc6.0 乙個person類,乙個建構函式 乙個析構函式 乙個char 成員變數,乙個 int成員變數。建構函式 len是字串的長度,然後為指標p分配記憶體空間,長度為len 1,1是為了字串末尾的 0,然後strcpy進行字串拷貝 析構函...