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.
这道题的意思是给定一个花圃flowerbed和n盆花,看这n盆花能否被放在花圃中,放置原则是相邻的两个小plots不能都放花,数组中的0代表没种花,1代表种了花,写一个boolean函数,判断给定的花圃能不能放n盆花。开始我分析的时候觉得可以通过判断连续的0的个数来求总共能放的花盆数,再与n相比,后来发现这样的方法根本不行,各种例外情况太多了:如果连续的两个0放在中间,则一盆花也不能放,如果放在开头和末尾则能放置一盆花,然后我写了判断这种情况的,又有其他情况不满足==这注定这个方法不行啊,代码仍放上来==
//not AC
int len = flowerbed.length;
int res = 0;
int count;
//int temp=0;
if(len == 0&&n==0||len==1&&flowerbed[0]==0&&n<=1||len==1&&flowerbed[0]==1&&n==0){return true;}
if(len == 0&&n!=0||len==1&&flowerbed[0]==1&&n>0){return false;}
if(flowerbed[0]==0&&flowerbed[1]==0){res++;}
if(flowerbed[len-2]==0&&flowerbed[len-1]==0){res++;}
for(int i=0;i<len;i++){
if(flowerbed[i]==0){
count = 1;
for( int j=i+1;j<len;j++){
if(flowerbed[j]==0){count++;}
else{
i = j;
break;
}
}
//if(flowerbed[0]==0&&flowerbed[1]==0||flowerbed[len-2]==0&&flowerbed[len-1]==0){res++;}
if(count%2==0){res = res+(count-2)/2;}
else {res = res+(count-1)/2;}
}
}
return res>=n;
so,参考了别人写的,很容易理解,就不解释了,代码如下:
int count=0;
for(int i=0;i<flowerbed.length;i++){
if(i==0||flowerbed[i-1]==0&&flowerbed[i]==0&&i+1==flowerbed.length||flowerbed[i+1]==0){
flowerbed[i]=1;
count++;
}
}
return count>=n;