题目描述:
标签:贪心 数组
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。
代码:
思路分析:
1、找到能种花的条件,即前一块地和后一块地都没有种花,即pre和next为0
2、但要注意第0个元素没有前元素,最后一个元素没有后元素,所以要记得先处理
3、我感觉这题的贪心思想就是只要找到满足条件的地就种花,尽量种尽可能多的花吧
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
for(int i = 0;i < flowerbed.length;i++){
if(flowerbed[i] == 1){
continue;
}
int pre = i == 0 ? 0 : flowerbed[i-1];
int next = i == flowerbed.length - 1 ? 0 : flowerbed[i+1];
if(pre == 0 && next == 0){
n--;
flowerbed[i] = 1;
}
}
return n <= 0;
}
}