题目描述
flowerbed 数组中 1 表示已经种下了花朵。花朵之间至少需要一个单位的间隔,求解是否能种下 n 朵花。
思路
贪心算法。
从左到右扫描数组 flowerbed,如果数组中有一个 0,并且这个 0 的左右两侧都是 0,那么我们就可以在这个位置种花,即将这个位置的 0 修改为1,并将计数器 cnt 增加 1。对于数组的第一个和最后一个位置,我们只需要考虑一侧是否为 0。
代码
时间复杂度: O(N)
空间复杂度: O(1)
判断条件的另一种写法:
if (flowerbed[i] == 0 && (i == 0 || flowered[i - 1] == 0) && (i == flowered.length - 1 || flowered[i + 1] == 0))