您的位置:首页 > 其它

Can Place Flowers

2017-09-23 14:25 183 查看
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.

思路

1.如果第i个元素没有种花,那么当其相邻的两个位置上的元素为0时可以种下。

2.对于第一个位置和最后一个位置,都只有一个相邻的元素。可以把0作为第一个位置的左邻,最后一个位置的右邻

3.遍历数组,记录可以种花的位置总数,当总数等于n了说明已经足够,可以停止遍历。

public class CanPlaceFlowers {
public boolean canPlaceFlowers(int[] nums, int n) {
int num = 0;
for(int i=0; i<nums.length-1 && num < n; i++) {
if(nums[i] == 0) {
int next = (i == nums.length-1)?0:nums[i+1];
int pre = (i == 0)?0:nums[i-1];
if(next == 0 && pre == 0) {
num++;
nums[i] = 1;
}
}
}
return num == n;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: