摘要:題目要求請(qǐng)戳假如一個(gè)格子的盒子里有個(gè)新鮮橘子,有個(gè)爛橘子。每隔一分鐘我們?nèi)ミ@個(gè)盒子里面數(shù)一數(shù),直到爛橘子沒(méi)有增加。沒(méi)有新鮮的橘子,返回分鐘數(shù)。如果這四個(gè)位置部分位置有新鮮的橘子,那么腐爛還會(huì)繼續(xù)。
題目要求請(qǐng)戳
假如一個(gè)M x M 格子的盒子里有 n (n > 0)個(gè)新鮮橘子,有 m 個(gè)爛橘子。每隔一分鐘我們?nèi)ミ@個(gè)盒子里面數(shù)一數(shù),直到爛橘子沒(méi)有增加。結(jié)果就是:
1.并且還有新鮮的橘子,返回 -1。
2.沒(méi)有新鮮的橘子,返回分鐘數(shù)。
第一步將二維數(shù)組初始化為一維數(shù)組:
function initData(a){ var result = [], n = 0, m = 0, j = 0; for(j = 0; j < M; j++) { result[j * M + 0] = { status: a[j][0], willBletOthers: a[j][0] === 2 }; result[j * M + 1] = { status: a[j][1], willBletOthers: a[j][1] === 2 }; result[j * M + 2] = { status: a[j][2], willBletOthers: a[j][2] === 2 }; if (a[j][0] == 1) { n += 1; } if (a[j][1] == 1) { n += 1; } if (a[j][2] == 1) { n += 1; } if (a[j][0] == 2) { m += 1; } if (a[j][1] == 2) { m += 1; } if (a[j][2] == 2) { m += 1; } } return { result: result, n: n, m: m }; }
每隔一分鐘,一個(gè)放在 x 位置的格子的爛橘子,其他四個(gè)位置 x + 1、x - 1、x + M 、x - M,都會(huì)腐爛(注意邊界)。如果這四個(gè)位置部分位置有新鮮的橘子,那么腐爛還會(huì)繼續(xù)。然后繼續(xù)觀察其他位置,直到最后一個(gè)格子。下一分鐘再來(lái)看
function blet(index, result){ var bletNum = 0; if(-1< index + 1 && index + 1 < M*M && result[index + 1].status == 1){ bletNum += 1; result[index + 1] = {status: 2, willBletOthers: false} } if(-1< index + M && index + M < M*M && result[index + M].status == 1){ bletNum += 1; result[index + M] = {status: 2, willBletOthers: false} } if(-1< index - 1 && index - 1 < M*M && result[index - 1].status == 1){ bletNum += 1; result[index - 1] = {status: 2, willBletOthers: true} } if(-1< index - M && index - M < M*M && result[index - M].status == 1){ bletNum += 1; result[index - M] = {status: 2, willBletOthers: true} } return bletNum; } var M = 3, rawData = [[2, 1, 1], [1, 1, 0], [0, 1, 1]]; function letGo(rawData){ var data = initData(rawData), result = data.result, n = data.n, m = data.m, k, mins = 0, sum; if(m == 0 && n > 0){ return -1; } if(m == 0 && n == 0){ return 0; } while (n > 0 && m > 0) { mins += 1; sum = 0; for (k = 0; k < result.length; k++) { if (result[k].status == 2) { if (result[k].willBletOthers) { sum += blet(k, result); } else { result[k].willBletOthers = true; } } } if (sum === 0) { break; } else { n -= sum; m += sum; } } return mins; } console.log(letGo(rowData));
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/102526.html
摘要:前言當(dāng)代碼中出現(xiàn)多重語(yǔ)句或者語(yǔ)句時(shí)。代替多重分支這個(gè)情況的代替方式是可以為晴天時(shí)處理邏輯下雨時(shí)處理邏輯陰天時(shí)處理邏輯策略模式使用策略模式可以代替多重和語(yǔ)句,讓代碼維護(hù)變得更加簡(jiǎn)單。狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變其行為。 前言 當(dāng)代碼中出現(xiàn)多重if-else語(yǔ)句或者switch語(yǔ)句時(shí)。弊端之一:如果這樣的代碼出現(xiàn)在多處,那么一旦出現(xiàn)需求變更,就需要把所有地方的if-els...
摘要:生日禮物題目來(lái)源京東實(shí)習(xí)生招聘原題鏈接可在線提交賽碼網(wǎng)題目描述的生日快到了,這一次,小東決定為送一份特別的生日禮物為其慶生。小東計(jì)劃送一個(gè)生日卡片,并通過(guò)特別的包裝讓永遠(yuǎn)難忘。 最近2個(gè)月時(shí)間都比較忙,另外還有些其他的事情,幾乎沒(méi)有怎么做題和寫文章了,害怕自己又開(kāi)始懶散起來(lái)了,所以還是督促自己不斷地學(xué)習(xí)和練習(xí)編碼。最近還需要好好學(xué)下python面向?qū)ο蟮囊恍┲R(shí)了。今天我們來(lái)分析一個(gè)J...
摘要:前言在大廠工作了年,當(dāng)了年的前端面試官,把大廠常問(wèn)的面試題與答案匯總在我的中。第題如何劫持的請(qǐng)求,提供思路難度阿里騰訊很多人在上搜索前端面試詳解,把答案倒背如流,但是問(wèn)到如何劫持請(qǐng)求的時(shí)候就一臉懵逼,是因?yàn)檫€是停留在理論性階段。前言 在大廠工作了6年,當(dāng)了3年的前端面試官,把大廠常問(wèn)的面試題與答案匯總在我的Github中。希望對(duì)大家有所幫助,助力大家進(jìn)入自己理想的企業(yè)。 項(xiàng)目地址是:git...
摘要:前言在大廠工作了年,當(dāng)了年的前端面試官,把大廠常問(wèn)的面試題與答案匯總在我的中。第題如何劫持的請(qǐng)求,提供思路難度阿里騰訊很多人在上搜索前端面試詳解,把答案倒背如流,但是問(wèn)到如何劫持請(qǐng)求的時(shí)候就一臉懵逼,是因?yàn)檫€是停留在理論性階段。 前言 在大廠工作了6年,當(dāng)了3年的前端面試官,把大廠常問(wèn)的面試題與答案匯總在我的Github中。希望對(duì)大家有所幫助,助力大家進(jìn)入自己理想的企業(yè)。 項(xiàng)目地址是:...
閱讀 2060·2023-04-26 02:23
閱讀 1800·2021-09-03 10:30
閱讀 1373·2019-08-30 15:43
閱讀 1204·2019-08-29 16:29
閱讀 547·2019-08-29 12:28
閱讀 2347·2019-08-26 12:13
閱讀 2203·2019-08-26 12:01
閱讀 2425·2019-08-26 11:56