摘要:能否在不打破種植規(guī)則的情況下種入朵花能則返回,不能則返回。示例輸入輸出示例輸入輸出注意數(shù)組內(nèi)已種好的花不會(huì)違反種植規(guī)則。輸入的數(shù)組長(zhǎng)度范圍為。是非負(fù)整數(shù),且不會(huì)超過(guò)輸入數(shù)組的大小。
LeetCode 605. 種花問(wèn)題
假設(shè)你有一個(gè)很長(zhǎng)的花壇,一部分地塊種植了花,另一部分卻沒(méi)有。可是,花卉不能種植在相鄰的地塊上,它們會(huì)爭(zhēng)奪水源,兩者都會(huì)死去。
給定一個(gè)花壇(表示為一個(gè)數(shù)組包含0和1,其中0表示沒(méi)種植花,1表示種植了花),和一個(gè)數(shù) n 。能否在不打破種植規(guī)則的情況下種入 n 朵花?能則返回True,不能則返回False。
示例 1:
示例 2:
我的思路
連續(xù)空地?cái)?shù) 可種花的最值 0 => 0 1 => 0 2 => 0 3 => 1 4 => 1 5 => 2 6 => 2 7 => 3
有感覺(jué)的老哥 ,估計(jì)已經(jīng)有了想法,沒(méi)錯(cuò)就是
parseInt((n - 1) / 2 ) = 可以種幾顆 // (n為最近兩個(gè)花 之間的空地?cái)?shù)量)
得出了這個(gè)結(jié)論 就基本完成了 但是還有2種特殊情況,以下是完整代碼(戰(zhàn)勝84%的js提交)
let canPlaceFlowers = (flowerbed, n) => { let filedBegin = flowerbed[0] > 0 ? true : false; let filedEnd = flowerbed[flowerbed.length - 1] > 0 ? true : false; if (!filedBegin) { flowerbed.unshift(1, 0) } if (!filedEnd) { flowerbed.push(0, 1) } //上面步驟的原因 // 遇到這兩種情況[0, 0, 1, 0, 0] 或者[0] // 按照parseInt((n - 1) / 2) 規(guī)則得出的都是零 因?yàn)檫@種算法 是以 兩邊都是花的情況下的結(jié)果 // 而上面這兩種 0的兩面 或者有一面 是沒(méi)有花的 所以手動(dòng) 給他們加上 // [0, 0, 1, 0, 0]=> [1, 0, 0, 1, 0, 0, 0, 1] // [0]=> [1, 0, 0, 0, 1] // 這樣就符合我們的規(guī)則了 let size = 0 //最近兩個(gè)花 之間的空地?cái)?shù)量 let canfiled = 0 //可以種植的數(shù)量 for (let i = 1, len = flowerbed.length; i < len; i++) { if (flowerbed[i] > 0) {// if (size == 0) continue //說(shuō)明 處在 1 1 相鄰的情況 直接跳過(guò) let num = parseInt((size - 1) / 2) // 當(dāng)前間隔最多可以種植的數(shù)量 canfiled += num size = 0 //重置間隔數(shù)量 } else {//當(dāng)前是空地 空地?cái)?shù)量+1 size++ } } return canfiled >= n };
2.最快的范例
這種思路是以每個(gè)循環(huán)的元素為核心 當(dāng) 當(dāng)前空地元素的前一個(gè)元素和后一個(gè)元素為空地 那么代表著能夠種植,(當(dāng)然 依然要考慮到目標(biāo)數(shù)組的頭尾為空地0的情況) 而且直接改變?cè)瓟?shù)組 flowerbed[j] = 1 ->這是他邏輯中畫(huà)龍點(diǎn)睛的步驟
var canPlaceFlowers = function (flowerbed, n) { // 定義一個(gè)sum = 0 // 遍歷花壇,找到這樣一個(gè)位置,此位置空,&& 前后都為空,則sum+1 // 判斷sum與n大小比較 [0, 1, 0] if (!n) return true; var sum = 0 var length = flowerbed.length for (var j = 0; j < length; j++) { if (!flowerbed[j]) {//當(dāng)前是 空地 //對(duì)于右側(cè)的限制條件 true 表示可以種植(僅對(duì)于左側(cè)來(lái)講) var leftVoid = j === 0 || flowerbed[j - 1] === 0 //對(duì)于右側(cè)的限制條件 true 表示可以種植(僅對(duì)于右側(cè)來(lái)講) var rightVoid = j === length - 1 || flowerbed[j + 1] === 0 if (leftVoid && rightVoid) { // 可以種植 flowerbed[j] = 1 //直接將改位置 種上花 讓后面的判斷順利進(jìn)行 比較關(guān)鍵 sum++ if (sum === n) { //循環(huán)次數(shù) 可能少些 因?yàn)?sum的最大值是大于等于n 才能滿足 return true } } } } return false }
如果喜歡LeetCode或者更多數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,可以戳這里,歡迎star
掃一掃 往期文章數(shù)據(jù)結(jié)構(gòu)與算法-LeetCode 格雷編碼(No.89)
數(shù)據(jù)結(jié)構(gòu)與算法-LeetCode 種花問(wèn)題(No.605)
LeetCode-電話號(hào)碼的字母組合(No.17) 遞歸+hash
JavaScript 數(shù)據(jù)結(jié)構(gòu)與算法 這題你會(huì)嗎?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/109442.html
摘要:電話號(hào)碼的字母組合給定一個(gè)僅包含數(shù)字的字符串,返回所有它能表示的字母組合。給出數(shù)字到字母的映射如下與電話按鍵相同。注意不對(duì)應(yīng)任何字母。 LeetCode 17. 電話號(hào)碼的字母組合 給定一個(gè)僅包含數(shù)字 2-9 的字符串,返回所有它能表示的字母組合。給出數(shù)字到字母的映射如下(與電話按鍵相同)。 注意 1 不對(duì)應(yīng)任何字母。 showImg(https://user-gold-cdn.xit...
摘要:例如,也是一個(gè)有效的格雷編碼序列。示例輸入輸出解釋我們定義格雷編碼序列必須以開(kāi)頭。給定編碼總位數(shù)為的格雷編碼序列,其長(zhǎng)度為。因此,當(dāng)時(shí),其格雷編碼序列為。 LeetCode 89. 格雷編碼 格雷編碼是一個(gè)二進(jìn)制數(shù)字系統(tǒng),在該系統(tǒng)中,兩個(gè)連續(xù)的數(shù)值僅有一個(gè)位數(shù)的差異。給定一個(gè)代表編碼總位數(shù)的非負(fù)整數(shù) n,打印其格雷編碼序列。格雷編碼序列必須以 0 開(kāi)頭。第一個(gè)數(shù)與最后一位數(shù) 也只差以...
摘要:微信小程序圖片上傳阿里云服務(wù)器也折騰了蠻久才解決的,所以特意去記錄一下。上傳失敗第四步源碼在這里如果覺(jué)得這面文章對(duì)你有幫助的話,可給我點(diǎn)個(gè)這里,謝謝最后,希望這篇文章對(duì)你有所幫助,真真確確是可以在微信小程序中上傳圖片到阿里云的。 本人今年6月份畢業(yè),最近剛在上海一家小公司實(shí)習(xí),做微信小程序開(kāi)發(fā)。最近工作遇到一個(gè)小問(wèn)題。 微信小程序圖片上傳阿里云服務(wù)器Oss也折騰了蠻久才解決的,所以特意...
摘要:微信小程序圖片上傳阿里云服務(wù)器也折騰了蠻久才解決的,所以特意去記錄一下。上傳失敗第四步源碼在這里如果覺(jué)得這面文章對(duì)你有幫助的話,可給我點(diǎn)個(gè)這里,謝謝最后,希望這篇文章對(duì)你有所幫助,真真確確是可以在微信小程序中上傳圖片到阿里云的。 本人今年6月份畢業(yè),最近剛在上海一家小公司實(shí)習(xí),做微信小程序開(kāi)發(fā)。最近工作遇到一個(gè)小問(wèn)題。 微信小程序圖片上傳阿里云服務(wù)器Oss也折騰了蠻久才解決的,所以特意...
閱讀 1093·2021-11-22 14:56
閱讀 1530·2019-08-30 15:55
閱讀 3371·2019-08-30 15:45
閱讀 1666·2019-08-30 13:03
閱讀 2879·2019-08-29 18:47
閱讀 3341·2019-08-29 11:09
閱讀 2649·2019-08-26 18:36
閱讀 2624·2019-08-26 13:55