一,canPlaceFlowers类代码及测试代码
canPlaceFlowers.java
public class canPlaceFlowers {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
int a = flowerbed.length;
int count = 0;
//预设数组前的一个数为0并计数
int zero = 1;
for (int i = 0; i < a ; i++) {
if (flowerbed[i] == 0) {
zero++;
} else {
count += (zero - 1) / 2;
if (count >= n) return true;
zero = 0;
}
}
//尾0区间
zero++;
count += (zero - 1) / 2;
return count >= n;
}
}
canPlaceFlowersTest.java
import java.util.Scanner;
public class canPlaceFlowersTest {
public static void main(String[] args) {
int ARRAYLENGTH = 7; //指定数组长度
int a[] = new int[ARRAYLENGTH];
Scanner sc=new Scanner(System.in);
System.out.println("请输入n:");
int n=sc.nextInt();
System.out.println("请输入数组:");
for(int i = 0; i < a.length; i++){
a[i] = sc.nextInt();
}
canPlaceFlowers f=new canPlaceFlowers();
System.out.println(f.canPlaceFlowers(a,n));
}
}
二,求解思路
1.首先只考虑中间位置:3个连续的0可以种1朵,4个连续的0可以种1朵...以此类推,n个连续的0可以种【(n-1)/2】朵;
2.再考虑边界位置是否可以种花,可以在首尾进行补0操作;