【贪心】【数组】【2023-09-29】
605. 种花问题
种花要种在空地(没有种过花的位置)上,花不能种在相邻位置上否则会抢夺水资源无法正常生长,你需要判断花坛中的空地是否可以种植指定数量的花。
从左往右遍历数组 flowerbed
,只要能种花就立即种花。只要最后可以种花的数量大于等于 n
,返回 true
;否则返回 flase
。
对于位置 i
,只要 flowerbed[i-1]
、flowerbed[i]
以及 flowerbed[i+1]
均为 0
,则 i
位置可以种花。
实现代码
class Solution {
public:
bool canPlaceFlowers(vector<int>& flowerbed, int n) {
int m = flowerbed.size();
int cnt = 0;
for (int i = 0; i < m; ++i) {
if ((i == 0 || flowerbed[i-1] == 0) && flowerbed[i] == 0 && (i == m-1 || flowerbed[i+1] == 0)) {
++cnt;
++i; // 下一个位置肯定不能种花,直接跳过
}
}
return cnt >= n;
}
};
复杂度分析
时间复杂度: O ( n ) O(n) O(n), n n n 为数组 flowerbed
的长度。
空间复杂度: O ( 1 ) O(1) O(1)。
如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 。
如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。
最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 哦。