劍指offer 四 棧和佇列及數學相關 cpp

2021-10-02 16:21:53 字數 2714 閱讀 3057

1. 用兩個棧實現佇列

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

class

solution

intpop()

}int res = stack2.

top();

stack2.

pop();

return res;

}private

: stack<

int> stack1;

stack<

int> stack2;

};

2.包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧中所含最小元素的min函式(時間複雜度應為o(1))。

class

solution

void

pop(

)int

top(

)int

min()}

;

3. 棧的壓入、彈出序列

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)

class

solution}if

(index2==popv.

size()

&& data.

empty()

) res =

true

;return res;}}

;

4.滑動視窗的最大值

給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。

class

solution

vector<

int>

maxslidingwindow

(vector<

int>

& nums,

int k)

res.

push_back

(q_max.

front()

);//別忘了最後乙個視窗的最大值

return res;}}

;

5. 撲克牌順子

ll今天心情特別好,因為他去買了一副撲克牌,發現裡面居然有2個大王,2個小王(一副牌原本是54張_)…他隨機從中抽出了5張牌,想測測自己的手氣,看看能不能抽到順子,如果抽到的話,他決定去買體育彩票,嘿嘿!!「紅心a,黑桃3,小王,大王,方片5」,「oh my god!」不是順子…ll不高興了,他想了想,決定大\小 王可以看成任何數字,並且a看作1,j為11,q為12,k為13。上面的5張牌就可以變成「1,2,3,4,5」(大小王分別看作2和4),「so lucky!」。ll決定去買體育彩票啦。 現在,要求你使用這幅牌模擬上面的過程,然後告訴我們ll的運氣如何, 如果牌能組成順子就輸出true,否則就輸出false。為了方便起見,你可以認為大小王是0。

class

solution

return

(numofzero>=numofgap)

?true

:false;}

};

6.圓圈中最後剩下的數

從0開始

class

solution

int c=

(m-1

)%n;

//第乙個要刪除的數的下標,本來應該是c=(0+m-1)%n;

while

(nums.

size()

>1)

return nums.

front()

;}};

//約瑟夫環數學解法,由遞推公式求解

class

solution

return flag;}}

;

7. 字元流中第乙個不重複的字元

請實現乙個函式用來找出字元流中第乙個只出現一次的字元。例如,當從字元流中只讀出前兩個字元"go"時,第乙個只出現一次的字元是"g"。當從該字元流中讀出前六個字元「google"時,第乙個只出現一次的字元是"l"。如果當前字元流沒有存在出現一次的字元,返回#字元。

class

solution

char()

return

'#';

}private

: unordered_map<

char

,int

> map;

string s;

};

8.醜數

把只包含質因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。

class

solution

intgetuglynumber_solution

(int index)

return res.

back()

;}};

棧和佇列 劍指offer

題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的 min函式。class solution def init self self.elem def push self,node def pop self return self.elem.pop def top self return...

《劍指offer》 佇列和棧

一 兩個棧實現乙個佇列 題目 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 用乙個棧來存,另乙個棧出。需要考慮的情況如下 class solution int pop else if stack1.size 0 出隊 res stack2.top sta...

(四)劍指offer 棧與佇列篇

2.用兩個棧實現佇列 3.包含min函式的棧 4.棧的壓入 彈出序列 題目給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 答案思路 用佇列來存放滑動視窗裡邊的元素的下標,對...