↑看個小廣告,支持好內容↑
想像我們拿著計數器,當看到 1
就按一下、看到 0
就歸零,計數器最高累積到多少,即代表陣列最長有連續出現過幾個 1,這蠻 make sense 的。
我們需要每按一下都去跟最大值比較嗎?其實不用。讓雙指針來幫我們判斷就行!
0
就停下來如上圖,兩個指針會共同跑完一次迴圈,結算次數則減為 3 次。雙指針法在執行思路上蠻固定的,非常推薦用這題熟悉它!
參考程式碼:
var findMaxConsecutiveOnes = function(nums) {
let slow=fast=0;
let max=0;
while(fast<nums.length){
// 快針碰到 0 就停止
while(nums[fast]==1){
fast++
};
max=Math.max(fast-slow, max);
// 兩針於下個起點會合
fast++; slow=fast;
}
return max;
};
這有點亂搞,如果我們用 0
把陣列分割開呢?(什麼?你還不知道 join 跟 split?)
// join: 把陣列各項,用符號連接起來
[1,0,1,1,0,1].join("") // "101101"
// split: 把文字內容,依符號切割開來
"101101".split("0") // ["1","11","1"]
陣列最大項的長度,不就是要輸出的答案了嗎?Magic ^^
Array
57.9%
❤️ 若內容對你實用,歡迎追蹤本專題,或小額贊助支持~
⭐ 這是我的第 14 篇刷題筆記,完整解題索引看這裡 → Here