日野弥生:勉強しよう

LeetCode 605 - 种花问题

发表于2025年04月09日

#贪心 #数组

一开始想利用双指针的方式进行解决,通过头尾指针之间的0的个数来判断最多能种几朵花。确实,0的个数和能插入花的个数有一定的数学关系: 能插入花的个数 = (尾指针 - 头指针 - 1) // 2

但是,面临的困难:边界情况很难处理。

使用贪心理念

class Solution:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
        length = len(flowerbed)
        i = 0
        while i < length:
            if flowerbed[i] == 0:
                # 如果左边是空,或者没有左边时
                empty_left = (i == 0 or flowerbed[i - 1] == 0)

                # 如果右边是空,或者没有右边时
                empty_right = (i == length - 1 or flowerbed[i + 1] == 0)

                if empty_left and empty_right:
                    flowerbed[i] = 1
                    n -= 1
                    if n == 0:
                        # 剪枝优化,如果已经插完了不需要继续遍历下去
                        return True
                    i += 2  # 剪枝优化,插入花后,下一个位置必然不能插花,跳过下一个位置
                    continue
            # 正常迭代
            i += 1
        return n <= 0

フラッシュタブ:LeetCode

题目链接:https://leetcode.cn/problems/can-place-flowers/

上一篇

LeetCode 1431 - 拥有最多糖果的孩子

下一篇

LeetCode 238 - 除自身以外数组的乘积