解 頭條的演算法面試題 圓環開關燈

2021-09-12 15:21:47 字數 1604 閱讀 4595

1、這是個圓環,所以沒有邊界,要處理好陣列的邊界問題。

2、100個燈泡,燈的數量是肯定的,這陣列的長度可以保證。

3、開關燈規則,觸發乙個燈的開關會影響旁邊2個燈(取反)。

4、要所有燈泡都亮,那麼最後一次觸發肯定是3個連續暗的燈泡在一起的情況。

// 開關燈,實現圓環的開關燈邏輯,注意處理一下陣列的邊界情況即可

function trigger(index, list)

// 左邊

var left = index - 1;

left = left >= 0 ? left : len - 1;

// 右邊

var right = index + 1;

right = right >= len ? right - len : right;

list[left] = !list[left];

list[index] = !list[index];

list[right] = !list[right];

return list

}

說明:

注釋中,0表示暗,1表示亮。

演算法複雜度為n。

// 注釋中,0表示暗,1表示亮。

function init(list) }/*

* 迴圈結束後,最後可能出現4種情況(索引0-1,1表示亮,0表示滅):00,01,10,11

* 將前3情況預處理成(..0100...)的模式,我們要處理成..000...的情況,最後將燈點亮

* forward的index 是0100中的00的起始索引位置,請記住進入forward時,list最後3個暗燈是0100的排列的

* */

if(!list[0]&&!list[1]) else if(!list[0]&&list[1]) else if(list[0]&&!list[1]) else }/*

* 最後1次開燈要為連續的3個暗燈(即000,其餘為1),才能讓所有燈都亮了,它就是做這件事的。

* 讓0100中的00繞一圈到左邊來=>0001=>全部點亮了

* */

function forward(index, list, num)

// 如果第3個位置是1就繼續偏移

if(list[i0]) else

}

寫了乙個隨機生成陣列的方法,來隨機生成亮暗隨機的100個燈。

function getdata(num) 

return list

}

寫了個校驗最終結果的方法,100個值看不過來。

頭條曠世演算法崗演算法面試題(非機器學習題)

對於乙個不同數的序列如何做到o 1 的新增,查詢,刪除,取隨機數 首先考慮新增查詢和刪除,能o 1 的刪除查詢的必然是hashtable 然後考慮取隨機數,取隨機數就需要知道下標,那麼我可以增加乙個陣列,對於新增操作好說,但對於刪除操作我對於每乙個數要知道陣列中的下標,這個時候維護乙個hashmap...

頭條面試題 Redis Redis的原理和使用

redis是高效能的key value資料庫 redis支援資料的持久化,即將記憶體中的資料存數在磁碟中,重啟的時候再次載入進行使用 redis支援master salve模式的資料備份 redis所有的操作都是原子性的,即要麼成功執行要麼不執行 redis支援豐富的特性,支援publish sub...

頭條面試題 計算目錄樹的深度

題目 前端在後台管理系統經常會用到目錄樹,求下面目錄tree的高度。得出depth即為樹的高度得出depth即為樹 const tree function getdepth tree depth return depth console.log getdepth tree 輸出4定義變數depth為...