題目:[劍指offer-滑動視窗的最大值]
暴力列舉視窗。
class solution
ret.push_back( max );
}return ret;
}};
這個思路也是參考了網上的方法,非常的巧妙。
對於,設計乙個que.它的功能是儲存滑動視窗可能的最大值,整個視窗按降序進行排列。
隊頭的最大值是當前滑動視窗的最大值。
那麼每一次來乙個新的元素,它肯定要是進入佇列的。關鍵是怎麼進入佇列。
如果它比之前的所有元素大,那麼之前的所有元素出對。因為他們無論如何都不可能再作為滑動視窗的最大值。
但是,如果有比當前元素大的,又有比當前元素小的呢?顯然,小的肯定是出隊。因為他們無論如何也不可能作為滑動視窗的最大值!比當前元素大的肯定還是當前滑動視窗的最大值,那麼當前元素入隊的意義在哪呢?在於如果隊頭的元素失效,也就是說不在滑動視窗之後,當前元素是可能作為滑動視窗最大值的。所以,每個元素都要入隊,入隊前把比自己小的都出隊。
這裡還有乙個技巧是怎麼判斷乙個元素是否出隊,乙個好的辦法是在que中儲存元素的下標。那麼每次可以判斷隊頭元素的下標和當前元素下標差來判斷是否滑出滑動視窗。
class solution
ret.push_back( num[que.front()] );
for(int i = size; i < sz; ++i)
return ret;
}};
劍指offer 滑動視窗最大值
很多題解都是用雙端佇列,但是既然是區間最值得問題,那麼可以用st表 唯一注意的是引數陣列的大小一定要大於視窗的大小,不然沒意義,即 中的len size的時候退出 果然還是引數的合法性一定要考慮,尤其是提示段錯誤的時候,而自己在本地測試沒問題,一般都是引數合法性的問題!一開始就是漏了這個條件,一直提...
劍指offer 滑動視窗的最大值
題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們 的最大值分別為 針對陣列的滑動視窗有以下6個 思路描述 掃瞄給定的陣列,用乙個大小為size的堆維護,將這次的元素加入堆中,找出其中的最大值 然後利用firs...
劍指offer 滑動視窗的最大值
題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 這個題也不錯。了解了關於雙向佇列的知識 1.加入佇列時 把比它小的數全部出佇列 因為這些數不可能成為最大數 2.每...