劍指 滑動視窗兩道題目

2021-10-19 14:59:48 字數 1394 閱讀 2390

滑動視窗的一般套路是:

維護兩個指標,一左一右,代表視窗的兩個邊界。

左右邊界只能向左不能向右。

按要求在右邊界填加陣列新元素

在一定情況下,移除左邊界的元素【即左指標左移】

維護視窗中值保持某種性質

大部分情況下都適用雙端佇列deque來實現

59是滑動視窗最經典的題目。 滑動視窗分為固定與變長,這題屬於固定視窗。

本題還可以順便練習以下雙端佇列deque的api【以前我一直以為只有linkedlist才有佇列,原來還有乙個介面】

57題是變長滑動視窗題。

維護乙個雙端佇列,保證輸入元素的單調遞減。

每次插入乙個元素,將最左元素除去

注意:若最左元素是視窗外元素,需要去除掉

public

int[

]maxslidingwindow

(int

nums,

int k)

res[0]

= deque.

peekfirst()

;for

(int i = k; i < len; i++

)return res;

}

維護左右指標,和乙個sum,若視窗值總和sum < target, 右指標右移,直到sum >= target 若sum > target ,將左指標右移,並不斷減少sum的對應值 若sum == target, 判斷隊長是不是1,將結果新增進入【**並將最左元素移除**】
public

int[

]findcontinuoussequence

(int target)

res.

add(list);}

if(sum > target)

break;}

}int

result =

newint

[res.

size()

];for(

int i =

0; i < res.

size()

; i++

)return result;

}

從右向左定義乙個視窗,使得其中的每個字元不為空

這題的關鍵在於使用substring()

public string reversewords

(string s)

return sb.

tostring()

.trim()

;}

有序陣列需要條件反射式的想到三種解法:

(1)二分;

(2)左右雙指標;

(3)滑動視窗。

有「最大值」不一定是動態規劃嗷!

兩道簡單的題目

第一次發表文章,就發表兩到簡單點的題目好了 第一道題目是這樣的 現在有乙個整數的陣列,然後給定乙個目標數,我們要做的是找出陣列中唯一存在的兩個不同的數,其相加能夠得到這個目標數,然後返回這兩個數的下標比如 given nums 2,7,11,15 target 9,because nums 0 nu...

劍指 74,滑動視窗

題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 思路 我們採用乙個佇列來儲存視窗,遍歷所有數字,依次壓入。首先,如果seq有數字,就使得要壓入的這個是如果大的話壓...

中興筆試的兩道題目

中興的筆試的兩道題目,乙個題目是按頻次排序,乙個題目是動態規劃求揹包問題。題目描述 題意為從乙個無序陣列中,將其中的整數按照出現的頻次多少來排列 並且出現幾次就排列幾個 按照出現頻次從高倒低排序,並且頻次相同的時候做乙個穩定排序,先出現的排在前面,比如輸入為 1,2,1,2,9,9,1,6,4,4,...