485. Max Consecutive Ones (最大連續 1 的個數)

2023/11/08閱讀時間約 2 分鐘


英文版點我中文版點我


↑看個小廣告,支持好內容↑



❶ Counter

想像我們拿著計數器,當看到 1 就按一下、看到 0 就歸零,計數器最高累積到多少,即代表陣列最長有連續出現過幾個 1,這蠻 make sense 的。


❷ Two Pointers

我們需要每按一下都去跟最大值比較嗎?其實不用。讓雙指針來幫我們判斷就行!

  • 慢針:固定在起點
  • 快針:一路往下檢查,碰到 0 就停下來
  • 結算兩針之間的距離,然後在下個起點會合
當快針 F 停下來時,它與慢針 S 的距離,即代表連續出現了幾項 1

當快針 F 停下來時,它與慢針 S 的距離,即代表連續出現了幾項 1

如上圖,兩個指針會共同跑完一次迴圈,結算次數則減為 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

54會員
57內容數
我要成為 LeetCode 王!快跟我一起踏上旅程!
留言0
查看全部
發表第一個留言支持創作者!