种花问题
- https://leetcode.cn/problems/can-place-flowers/
描述
-
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
-
给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false 。文章来源:https://www.toymoban.com/news/detail-431052.html
示例 1:
输入:flowerbed = [1,0,0,0,1], n = 1
输出:true
示例 2:
输入:flowerbed = [1,0,0,0,1], n = 2
输出:false
提示:
- 1 <= flowerbed.length <= 2 * 1 0 4 10^4 104
- flowerbed[i] 为 0 或 1
- flowerbed 中不存在相邻的两朵花
- 0 <= n <= flowerbed.length
算法实现
1 )方案 1文章来源地址https://www.toymoban.com/news/detail-431052.html
function canPlaceFlowers(flowerbed: number[], n: number): boolean {
// 计数
let count = 0
// 在这里对数组进行扩展来方便编程,最后一块地能不能种只取决于前面的是不是1,所以默认最后一块地的右侧是0
flowerbed.push(0)
for (let i = 0, len = flowerbed.length - 1; i < len; i++) {
// 当前是非零的情况,直接跳过
if (flowerbed[i] !== 0) {
continue
}
// 开始边界的处理
if (i === 0 && flowerbed[1] === 0) {
count++
i++
} else if (flowerbed[i - 1] === 0 && flowerbed[i + 1] === 0) {
// 这种情况是正常情况,当前左右都是0,则可种树
count++
i++
}
// 结束边界无需处理,因为数组在最后扩展了一个0,上述正常情况已经包含了 无
}
return count >= n
}
- 这里需要一个数学建模,哪些情况下可以种花,简化模型
- 这里的地就是指 1或0,1是一块地,0也是一块地
- 我们需要放1,能放1的地方是左边和右边都是0,并且当前位置是0
- 匹配完成后,我们要主动跳过当前匹配,也就是跳2个位置
- 体现在手动 i++以及for循环一次后自带的一个i++
到了这里,关于数据结构与算法之数组: Leetcode 605. 种花问题 (Typescript版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!