605. 种花问题
题目:
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。
思路:
从左向右遍历花坛,在能种花的地方就种一朵,能种就种(因为在任一种花时候,不种都不会得到更优解),这是一种贪心的思想。
可以种花的条件:
1.自己为空
2.左边为空 或者 自己是最左
3.右边为空 或者 自己是最右
最后判断n朵花是否有剩余,为了效率起见,每次种花就做判断,一旦花被种完就返回true
代码:
class Solution {
public boolean canPlaceFlowers(int[] flowerbed, int n) {
for(int i = 0; i < flowerbed.length; i++){
//1.自己为空,2.左边为空或自己是最左,3.右边为空或自己是最右
if(flowerbed[i] == 0 && (i == 0 || flowerbed[i-1] == 0) && (i == flowerbed.length - 1 || flowerbed[i+1] == 0) ){
n--;
//每次种花判断,一旦花被种完就返回true
if(n <= 0 ){
return true;
}
flowerbed[i] = 1;
}
}
return n <= 0;
}
}
转载:
如有冒犯请私信我删除
链接:https://leetcode.cn/problems/can-place-flowers/solution/1-chong-hua-wen-ti-jian-dan-de-tan-xin-b-h8xb/