面試題–【劍指offer】 題目解答
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為; 針對陣列的滑動視窗有以下6個: , , , , , 。
使用蠻力法,先獲得所有的滑動視窗,然後在得到視窗的最大值即可。但是這個方法的時間複雜度是o(k*n),和滑動視窗的大小和元素總個數有關。
所以我們想乙個別的辦法,爭取用一次遍歷就可以解決問題,我們用乙個雙頭佇列來存放每個滑動視窗的最大值,如果當前滑動到的元素num[i]比佇列的尾部值大num[q.back()]大,那麼替換佇列尾部的值為當前滑動到的元素,並且保證最大值在佇列首部,如果比他小那麼直接加入到佇列尾部。 如果當前佇列中的最大值所在位置超過了滑動視窗大小的範圍,那麼要刪除佇列的最大值(即隊首元素),保持這個演算法,一直到遍歷完全部元素即可。時間複雜度是o(n)
class solution
return res;}}
;
劍指offer 面試題59 1 滑動視窗的最大值
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 掃瞄每個滑動視窗的所有數字並找出其中的最大值。如果滑動視窗的大小為k,則需要o k 時間找到最大值。對於長度為 n 的輸入陣...
劍指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的情形。對於負整指數,我們可以...