LeetCode: 605. Can Place Flowers
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.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.
自己的答案,11ms:
public class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
if (flowerbed == null) {
return false;
}
int length = flowerbed.length;
int start = 0;
int result = 0;
while (flowerbed[start] == 0) {
start++;
if (start == length) {
return n <= ((start + 1) / 2);
}
}
result += start/2;
int end = flowerbed.length - 1;
while (flowerbed[end] == 0) {
end--;
}
result += (flowerbed.length - 1 - end)/2;
int array = 0;
for (int i = start; i <= end; i++) {
if (flowerbed[i] == 0) {
array++;
} else {
if (array > 2) {
result += (array - 1) / 2;
}
array = 0;
}
}
if (n <= result) {
return true;
}
return false;
}
}
10ms的答案:
public class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
int count = 0;
int i = 0;
while(i < flowerbed.length){
if((flowerbed[i] == 0 && ( i == 0 || flowerbed[i-1] == 0)) && (i == flowerbed.length-1 || flowerbed[i+1] == 0 )){
flowerbed[i] = 1;
++count;
}
i++;
}
if(n <= count) return true;
return false;
}
}