每日一题:每天一个新挑战;
循序渐进:从易到难,扎实掌握;
系统分类:按数据结构分类,有助于构建知识框架;
丰富题量:100 道精选题,覆盖简单/中等/困难难度。
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false 。
示例 1:
输入:flowerbed = [1,0,0,0,1], n = 1
输出:true
示例 2:
输入:flowerbed = [1,0,0,0,1], n = 2
输出:false
提示:
- 1 <= flowerbed.length <= 2 * 10^4
- flowerbed[i] 为 0 或 1
- flowerbed 中不存在相邻的两朵花
- 0 <= n <= flowerbed.length
代码卡片

题目解析
题目要求在一个由 0 和 1 组成的数组 flowerbed 中种植 n 朵花,条件是不能在相邻的地块上种植花(即不能有两个连续的 1)。我们需要判断是否能够在不违反规则的情况下种下 n 朵花。
方法一:遍历检查
- 遍历 flowerbed 数组,检查每个位置是否可以种花。
- 如果当前位置 i 是 0 且前一个位置(i-1)和后一个位置(i+1)都是 0 或者是边界条件(不存在前一个或后一个位置),则可以在当前位置种植花,并将 n 减一。
- 如果在遍历结束时,n 变为 0 或更小,返回 true,否则返回 false。
- 时间复杂度:O(n),其中 n 是 flowerbed 的长度。我们只需要遍历一次 flowerbed 数组。
- 空间复杂度:O(1),我们只使用了常量级别的额外空间。
var canPlaceFlowers = function (flowerbed, n) {
let count = 0;
for (let i = 0; i < flowerbed.length; i++) {
if (flowerbed[i] === 0) {
const prev = i === 0 || flowerbed[i - 1] === 0;
const next = i === flowerbed.length - 1 || flowerbed[i + 1] === 0;
if (prev && next) {
flowerbed[i] = 1;
count++;
}
}
if (count >= n) return true;
}
return count >= n;
}
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/288989
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!