# 605. Can Place Flowers
可以反向思考,例如與其找沒種的 0,不如判斷有種過的 1 ,這樣可以更可以簡潔寫出各種狀況
Suppose you have a long flowerbed in which some of the plots are planted and some are not. However, flowers cannot be planted in adjacent plots - they would compete for water and both would die.
Given a flowerbed (represented as an array containing 0 and 1, where 0 means empty and 1 means not empty),
and a number n, return if n new flowers can be planted in it without violating the no-adjacent-flowers rule.
input: arr = [1,0,0, ...] 1 代表有種花 0 代表沒種花, n 代表新花數量
output: 回傳心花是否可以種完
關鍵是不能種相鄰的花
Example 1:
Input: flowerbed = [1,0,0,0,1], n = 1
Output: True
Example 2:
Input: flowerbed = [1,0,0,0,1], n = 2
Output: False
Note:
The input array won't violate no-adjacent-flowers rule.
The input array size is in the range of [1, 20000].
n is a non-negative integer which won't exceed the input array size.
/**
* @param {number[]} flowerbed
* @param {number} n
* @return {boolean}
*/
var canPlaceFlowers = function(flowerbed, n) {}
Edge Case
[0], [0, 1] 之類邊界值
怎麼解
其實很單純我卻想很久邊界值怎麼處理,其實只要判斷前後跟自己是不是 1 ,都是就跳過,不是就代表可以種花
Code
var canPlaceFlowers = function(flowerbed, n) {
let len = flowerbed.length;
let plotsNums = 0;
for(let i=0; i<len; i+=1){
if(flowerbed[i]===1 || flowerbed[i+1] ===1 || flowerbed[i-1] ===1){
// do nothing
}else{
plotsNums++;
flowerbed[i] = 1;
}
}
return plotsNums >= n
};
faster than 60.20%
如何改進
後來看到一個更容易理解就是前後都加 0
var canPlaceFlowers = function(flowerbed, n) {
flowerbed.unshift(0);
flowerbed.push(0);
for(let i=1;i<flowerbed.length;i++) {
if(flowerbed[i]===0&&flowerbed[i-1]===0&&flowerbed[i+1]===0) {
n--;
flowerbed[i]=1;
}
}
return n<=0;
};
// faster than 90.20%
Last updated
Was this helpful?