python-leetcode-种花问题

605. 种花问题 - 力扣(LeetCode)

使用 贪心算法 来解决这个问题,思路如下:

  1. 遍历 flowerbed 数组,找到值为 0 的地块。
  2. 检查该地块的前后是否为空 (即 flowerbed[i-1]flowerbed[i+1] 是否都为 0 或者 i 在边界)。
  3. 如果可以种花,就将 flowerbed[i] 设为 1 并减少 n 的数量。
  4. 如果 n 变成 0,提前返回 True,表示可以种下所有的花。
  5. 遍历结束后,如果仍然 n > 0,返回 False

代码实现如下:

python 复制代码
from typing import List

def canPlaceFlowers(flowerbed: List[int], n: int) -> bool:
    length = len(flowerbed)
    
    for i in range(length):
        if flowerbed[i] == 0:
            prev_empty = (i == 0 or flowerbed[i - 1] == 0)  # 边界或前一个为空
            next_empty = (i == length - 1 or flowerbed[i + 1] == 0)  # 边界或后一个为空
            
            if prev_empty and next_empty:  # 满足种植条件
                flowerbed[i] = 1
                n -= 1
                if n == 0:
                    return True  # 直接返回

    return n <= 0  # 如果 n 还大于 0,说明不能全部种下

# 测试
print(canPlaceFlowers([1, 0, 0, 0, 1], 1))  # True
print(canPlaceFlowers([1, 0, 0, 0, 1], 2))  # False
print(canPlaceFlowers([0, 0, 1, 0, 0], 1))  # True

复杂度分析:

  • 时间复杂度:O(n),只需要遍历一遍数组。
  • 空间复杂度:O(1),仅使用了常数额外空间。

这样可以高效判断能否种入 n 朵花,且尽可能早返回结果。

相关推荐
山烛4 分钟前
KNN 算法中的各种距离:从原理到应用
人工智能·python·算法·机器学习·knn·k近邻算法·距离公式
guozhetao17 分钟前
【ST表、倍增】P7167 [eJOI 2020] Fountain (Day1)
java·c++·python·算法·leetcode·深度优先·图论
吃着火锅x唱着歌19 分钟前
LeetCode 611.有效三角形的个数
算法·leetcode·职场和发展
技术卷24 分钟前
详解力扣高频SQL50题之619. 只出现一次的最大数字【简单】
sql·leetcode·oracle
CHANG_THE_WORLD3 小时前
金字塔降低采样
算法·金字塔采样
不知天地为何吴女士5 小时前
Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
算法
小坏坏的大世界5 小时前
C++ STL常用容器总结(vector, deque, list, map, set)
c++·算法
励志要当大牛的小白菜8 小时前
ART配对软件使用
开发语言·c++·qt·算法
qq_513970448 小时前
力扣 hot100 Day56
算法·leetcode
PAK向日葵9 小时前
【算法导论】如何攻克一道Hard难度的LeetCode题?以「寻找两个正序数组的中位数」为例
c++·算法·面试