本题实际是对数组中连续0的个数进行分析得到结果。网上有人说不好分析,这里我给出我的分析情况。
1.当连续零在开头和结尾时,最多可以种的花为连续零的个数/2;
2.当连续0的个数出现在中间时, 最多可以种的花为(连续零的个数-1)/2;
3.当数组中全身0时,最多可以种的花为(连续零的个数+1)/2;
java代码如下:
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
int s=0;
int l=0;
int s_index=0;
int l_index=0;
int max=0;
int num_zero=0;
int sum=0;
//全0的情况
for(int i=0;i<flowerbed.length;i++){
sum+=flowerbed[i];
}
if(sum==0){
max=(flowerbed.length+1)/2;
return max>=n;
}
//开头的0
for(int i=0;i<flowerbed.length;i++){
if(flowerbed[i]==0){
s++;
}else{
s_index=i;
break;
}
}
//结尾的0
for(int i=flowerbed.length-1;i>=0;i--){
if(flowerbed[i]==0){
l++;
}else{
l_index=i;
break;
}
}
max=s/2+l/2;
//中间的0
for(int i=s_index+1;i<l_index;i++){
if(flowerbed[i]==0){
num_zero++;
}else{
max+=(num_zero-1)/2;
num_zero=0;
}
}
max+=(num_zero-1)/2; /
return max>=n;
}
}