C 3 高階演算法 2 滑動視窗 單調棧

2022-08-31 06:00:13 字數 3044 閱讀 3951

序號滑動視窗類題目

1滑動視窗的最大值

2實現最大值佇列

3和為s的連續正數序列

4最長不含重複字元的子字串(滑動視窗)

題目1 滑動視窗的最大值

標準的滑動視窗解法!!!!!

class solution 

for ( int i = 0 ; i < nums.size(); i++ ) // 對每個位置進行入視窗的操作

window.push_back( i );

// 每次檢查視窗最前面的元素是否過期

if ( window.front() <= i - k )

// 視窗大小儲存元素

if ( i >= k-1 )

}return ans;

}};

自己的做法

class solution 

int cur_max = nums[0];

// 把初始視窗填上, 求得當前視窗最值, 註冊

int m = k <= ( nums.size()) ? k :nums.size();

for(int i = 0 ; i < m ; i ++)

ans.push_back(cur_max);

// 視窗大小要是比陣列size大,就不用滑動了

if ( k >= nums.size())

// 從 k 位置開始滑動,前端出乙個,後端進乙個

for (int i = k; i < nums.size() ; i ++ )

// ②如果 out 的 數字 剛好是當前最大值

// 分為兩種情況

// a--> in 的值比 out 的值 大 或相等

// b--> in 的值比 out 小 , 那就只能在佇列裡遍歷求新的最大值了

else if (out == cur_max)

else}}

ans.push_back(cur_max);

}return ans;

}};

題目2 - ii. 佇列的最大值

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

若隊列為空,pop_front 和 max_value 需要返回 -1

示例 1:

輸入:["maxqueue","push_back","push_back","max_value","pop_front","max_value"]

[,[1],[2],,,]

輸出: [null,null,null,2,1,2]

示例 2:

輸入:["maxqueue","pop_front","max_value"]

[,,]

輸出: [null,-1,-1]

class maxqueue 

// 直接返回最大值視窗的front()

int max_value() else

}// 從後面插入-> 修改基本佇列 和 最大值視窗

void push_back( int value )

window.push_back(value);

}// 從前端彈出-->

int pop_front()

return ans;

}};/**

* your maxqueue object will be instantiated and called as such:

* maxqueue* obj = new maxqueue();

* int param_1 = obj->max_value();

* obj->push_back(value);

* int param_3 = obj->pop_front();

*/

題目3 和為s的連續正數序列(滑動視窗)

輸入乙個正整數 target ,輸出所有和為 target 的連續正整數序列(至少含有兩個數)。

序列內的數字由小到大排列,不同序列按照首個數字從小到大排列。

示例 1:

輸入:target = 9

輸出:[[2,3,4],[4,5]]

示例 2:

輸入:target = 15

輸出:[[1,2,3,4,5],[4,5,6],[7,8]]

class solution 

if ( sum == target )

ans.push_back(tmp);

tmp.clear();}}

return ans;

}};

題目4 最長不含重複字元的子字串(滑動視窗)

請從字串中找出乙個最長的不包含重複字元的子字串,計算該最長子字串的長度.

示例 1:

輸入: "abcabcbb"

輸出: 3

解釋: 因為無重複字元的最長子串是 "abc",所以其長度為 3。

示例 2:

輸入: "bbbbb"

輸出: 1

解釋: 因為無重複字元的最長子串是 "b",所以其長度為 1。

示例 3:

輸入: "pwwkew"

輸出: 3

解釋: 因為無重複字元的最長子串是 "wke",所以其長度為 3。

請注意,你的答案必須是 子串 的長度,"pwke" 是乙個子串行,不是子串。

class solution 

dequewindow;

setst;

int ans = 0 ;

for ( int i = 0 ; i < s.size() ; i ++ ) // 每個位置的字串入佇列

else if ( st.count(s[i]) )

window.pop_front();

window.push_back(s[i]);

st.insert(s[i]);}}

return ans;

}};

C 單調佇列與單調棧 滑動視窗題解

現在有一堆數字共n個數字 n 10 6 以及乙個大小為k的視窗。現在這個從左邊開始向右滑動,每次滑動乙個單位,求出每次滑動後視窗中的最大值和最小值。例如 the array is 1 3 1 3 5 3 6 7 and k 3.第1行 2個整數n,k k n 1000000 第2行 n個整數,表示陣...

演算法 使用單調佇列解決滑動視窗問題

給定乙個大小為n 106的陣列。有乙個大小為k的滑動視窗,它從陣列的最左邊移動到最右邊。您只能在視窗中看到k個數字。每次滑動視窗向右移動乙個位置。以下是乙個例子 該陣列為 1 3 1 3 5 3 6 7 k為3。視窗位置 最小值最大值 1 3 1 3 5 3 6 7 13 1 3 1 3 5 3 6...

C3 彈性盒子2

align self 用於設定彈性元素自身在側軸 縱軸 方向上的對齊方式。align self屬性取值 auto 如果 align self 的值為 auto 則其計算值為元素的父元素的 align items 值,如果其沒有父元素,則計算值為 stretch flex start 彈性盒子元素的側...