題目介紹
假設(shè)你有一個很長的花壇衅澈,一部分地塊種植了花渐排,另一部分卻沒有。可是纷闺,花卉不能種植在相鄰的地塊上,它們會爭奪水源斯够,兩者都會死去啸蜜。
給定一個花壇(表示為一個數(shù)組包含0和1,其中0表示沒種植花实檀,1表示種植了花)惶洲,和一個數(shù) n 。能否在不打破種植規(guī)則的情況下種入 n 朵花劲妙?能則返回True湃鹊,不能則返回False。
題目分析
本題的主要思路的是需要大約 3 個 0 才可以在中間種花镣奋,已存在不合理的種花可忽略币呵,邊界處可僅考慮單邊。
第一次
實現(xiàn)的較為中規(guī)中矩,拿到當(dāng)前下標(biāo)判斷左右兩側(cè)是否存在空格余赢,并注意邊界問題芯义,其中 left 和 right 略顯粗糙。
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
if (flowerbed != null && flowerbed.length > 0) {
for (int i = 0; i < flowerbed.length; i++) {
if (flowerbed[i] == 1) {
continue;
}
int left = Math.max(i - 1, 0);
int right = i + 1 < flowerbed.length ? i + 1 : i;
if (flowerbed[left] == 0 && flowerbed[right] == 0) {
flowerbed[i] = 1;
n--;
}
}
}
return n <= 0;
}
}
第二次
可以將 flowerbed
左右各添加一個空格妻柒,需要添加啞節(jié)點(diǎn)導(dǎo)致空間復(fù)雜度有所上升扛拨,額外開辟了 n + 2 的數(shù)組空間。
邏輯方面遍歷下標(biāo)從 1 開始举塔,遍歷長度最大值依舊為 length 這樣下標(biāo)便不會越界绑警。
flowerbed
[0] + [1,0,0,0,1] + [0]
祝大家刷題順利,工作合意央渣!