Leetcode 605. 种花问题
2021第一道贪心,理清思路就不难,加了详细的注释,方便日后复习,也希望能帮到其他小伙伴,如有错误,欢迎指正!
Java实现:
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
// 其实这道题原理比较简单,题目问我们该花坛能否再种下n朵花,我们转换成贪心的思想,直接求出这个花坛中最多还能种多少花
// 计数还能再种多少花
int nums = 0;
// 由于相邻的地块不能同时种花,我们这里遍历每一个地块
for (int i = 0; i < flowerbed.length; i++){
// 其实大方向上看就两种情况,这块地有花、这块地没花,我们分类讨论
// 如果该地块种了花,那说明下一块地肯定不能种花,我们直接跳到下下块地,由于循环每次都会跳一块,因此我们只需要跳一块即可
if (flowerbed[i] == 1){
i ++;
// 如果这块地没种花呢?由于已经经过了前面一步,此时有三种情况,第一种前面没有地块,二前面跳了一步,三前面跳了两步
// 没有地块相当于前面没有花,跳一步说明前面一块没有花,跳两步说明前前面有花,但是前面一块没有花,总之前面就是一定没有花
// 那么只要下一块也没有花或者已经是最后一块地块了,就可以直接在这块地种花,种了以后下一块不能种了,直接跳过i += 1;
}else if(i == flowerbed.length - 1 || flowerbed[i + 1] == 0){
nums ++;
i ++;
}
}
// 最后我们看剩余可以种花的地块是否大于或等于n,是就返回true,否就返回false
return nums >= n;
}
}