滑動視窗的一般套路是:
維護兩個指標,一左一右,代表視窗的兩個邊界。
左右邊界只能向左不能向右。
按要求在右邊界填加陣列新元素
在一定情況下,移除左邊界的元素【即左指標左移】
維護視窗中值保持某種性質
大部分情況下都適用雙端佇列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,...