劍指Offer 面試題59 佇列的最大值

2021-10-03 05:27:08 字數 1977 閱讀 5375

題目:給定乙個陣列和滑動視窗的大小,請找出所有滑動視窗裡的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,它們的最大值分別為。

解決思路:利用雙端佇列

步驟插入數字

滑動視窗

佇列的下標

最大值122

0(2)

n/a2

32,3

1(3)

n/a3

42,3,4

2(4)44

23,4,2

2(4),3(2)45

64,2,6

4(6)66

22,6,2

4(6),5(2)67

56,2,5

4(6),6(5)68

12,5,1

6(5),7(1)

5

#include

#include

#include

#include

using

namespace std;

vector<

int>

maxinwindows

(const vector<

int>

& num,

unsigned

int size)

for(

unsigned

int i=size;isize()

;i++

) maxinwindows.

push_back

(num[index.

front()

]);}

return maxinwindows;

}int

main()

; vector<

int>

vecnumbers

(num, num+

sizeof

(num)

/sizeof

(int))

; vector<

int> result=

maxinwindows

(vecnumbers,3)

;for

(vector<

int>

::iterator it=result.

begin()

;it!=result.

end(

);it++

)return0;

}

題目:請定義乙個佇列並實現函式 max 得到佇列裡的最大值,要求函式 max、push_back 和 pop_back 的時間複雜度都是o(1)。
#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

template

<

typename t>

class

queuewithmax

void

push_back

(t number)

; data.

push_back

(internaldata)

; maximums.

push_back

(internaldata)

;

currentindex++;}

void

pop_front()

data.

pop_front()

;}t max()

const

private

:struct internaldata

; deque data;

deque maximums;

int currentindex;};

intmain()

劍指offer59佇列最大值

這道題為什麼在leetcode裡試easy。懷疑人生。之前做過一道在o 1 時間內找到最小值的棧 面試題30 和兩個棧實現佇列 面試題9 因此結合二者可以完成這道題。第二種思路 把有可能成為滑動視窗最大值的數值存入乙個兩端開口的佇列。deque collections.deque res,n len...

劍指offer面試題7

面試題7 用兩個棧實現佇列 using namespace std template class cqueue 預備知識 佇列 佇列也是一種常見的資料結構 特點是先進先出 fifo 在stl中有stack和queue兩個容器 template class stack 成員函式 empty size ...

劍指offer面試題11

面試題1 數值的整數的次方 題目 實現函式double power double base,int exponent 求base的 exponent次方。不得使用庫函式,同時不需要考慮大數問題。思路 首先應該明確指數的可能取值 正整數,0,負整數 另外還需要考慮底數是0的情形。對於負整指數,我們可以...