【力扣日记】605 种花问题

题目描述

假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。

给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。

算法思路

class Solution(object):
    def canPlaceFlowers(self, flowerbed, n):
        """
        :type flowerbed: List[int]
        :type n: int
        :rtype: bool
        """
        if n==0:return True
        if len(flowerbed)==1:
            if flowerbed[0]==0 :return True
            return False

        for i in range(len(flowerbed)):
            if i==0 and flowerbed[i]==0 and flowerbed[i+1]==0:
                flowerbed[i]=1
                n-=1
            elif i==len(flowerbed)-1 and flowerbed[i]==0 and flowerbed[i-1]==0:
                flowerbed[i]=1
                n-=1
            elif flowerbed[i-1]==0 and  flowerbed[i]==0 and flowerbed[i+1]==0:
                flowerbed[i]=1
                n-=1

            if n==0:return True
        return False

执行用时 :156 ms, 在所有 Python 提交中击败了86.03%的用户
内存消耗 :12.8 MB, 在所有 Python 提交中击败了5.88%的用户

        if n==0:return True
        if len(flowerbed)==1:
            if flowerbed[0]==0 :return True
            return False

        for i in range(len(flowerbed)):
            if i==0 and flowerbed[i]==0 and flowerbed[i+1]==0 or i==len(flowerbed)-1 and flowerbed[i]==0 and flowerbed[i-1]==0 or flowerbed[i-1]==0 and  flowerbed[i]==0 and flowerbed[i+1]==0:
                flowerbed[i]=1
                n-=1
            if n==0:return True
        return False

方法2

        ans, count = 0, 1
        for i in range(len(flowerbed)):
            if not flowerbed[i]:
                count += 1
            else:
                ans += (count - 1)//2
                count = 0
        if count:
            ans += count//2
        return ans >= n

计算整个flowerbed可以再植入多少花,最后和n进行大小比较。

说起来,因为ans表示位置,所以还可以根据排列组合计算植花的方式。

发布了210 篇原创文章 · 获赞 20 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/104861791