首页 > 编程语言 >吴师兄学算法day08 贪心 605. 种花问题

吴师兄学算法day08 贪心 605. 种花问题

时间:2024-01-19 19:33:06浏览次数:37  
标签:605 flowebed day08 int flowerbed 种花 位置 new

题目:605. 种花问题

易错点:

  • 没想出来,借鉴了灵山的代码的思路,强行种花。
  • 我喜欢这个思路。感觉有点像设置哨兵那样的。
  •  

我的代码:

class Solution:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
        # 修改数组,每次都种花,
        # 凑够3个0 就种花
        size = len(flowerbed)   # 假设是10
        new_flowebed = [0] + flowerbed +[0] # 总长度 size + 2 # 现在长度12
        for i in range(1,size+1): #  闭区间,(1,11) # 取1,2..8,9,10 
            if new_flowebed[i-1] == 0 and new_flowebed[i] == 0 and new_flowebed[i+1] == 0:
                new_flowebed[i] = 1 # 种花
                n -=1
    
        # 最后种完,n小于等于0 说明都种完了
        if n <= 0 :
            return True
        else:
            return False

老师的代码:

class Solution:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
     # 遍历数组,在遍历过程中,采取贪心的思路,并不需要【每个位置】都去查看是否可以种花
       # 1、当前位置已经种花,那么后一个位置明显不能种花,可以跳过去
       # 2、当前位置没有种花,需要考虑后面一个位置是否种花

       i = 0 

       while i < len(flowerbed) and n > 0 :

           # 1、当前位置已经种花,那么后一个位置明显不能种花,可以跳过去
           # 所以让 i 执行加 2 操作,跳过了加 1 后的那个位置
           if flowerbed[i] == 1 :

               # 让 i 执行加 2 操作
               i += 2

           # 2、说明当前位置没有种花 flowerbed[i] == 0
           # 3、如果这个位置是数组的最后一个位置,说明后一个位置不存在,没有限制,说明 flowerbed[i] 可以种花
           # 4、如果这个位置【不是】数组的最后一个位置,那么只有后一个位置【没有种花】,才有资格在 flowerbed[i] 位置种花
           elif i == len(flowerbed) - 1 or flowerbed[i + 1] == 0 :

               # 以上两种条件都可以在 flowerbed[i] 位置种花
               # 成功之后,所需目标减 1
               n -= 1
               
               # 在 flowerbed[i] 位置种花之后,i + 1 位置不需要去考虑了,因为它明显不能种花,可以跳过去
               # 让 i 执行加 2 操作
               i += 2
            
           # 5、说明当前位置没有种花 flowerbed[i] == 0
           # 6、但是后一个位置已经种花了,那么当前位置无法采取种花操作
           else:

               # i + 1 位置已经种花,不用再去访问一遍
               # i + 2 位置考虑到 i + 1 位置已经种花,所以也无法种花,不用再去访问
               # 让 i 执行加 3 操作
               i += 3

       # 最后查看是否用完了 n
       return n <= 0

灵山的写法:

class Solution:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
        flowerbed = [0] + flowerbed + [0]
        for i in range(1, len(flowerbed) - 1):
            if flowerbed[i - 1] == 0 and flowerbed[i] == 0 and flowerbed[i + 1] == 0:
                flowerbed[i] = 1  # 种花!
                n -= 1
        return n <= 0

作者:灵茶山艾府
链接:https://leetcode.cn/problems/can-place-flowers/solutions/2463018/ben-ti-zui-jian-dan-xie-fa-pythonjavacgo-6a6k/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

总结:

  • 更喜欢灵山的思路,简洁优雅!
  •  

参考:

https://r07na4yqwor.feishu.cn/docx/FePNdozgUo7yZBx48tLcbXVUnIc

灵山题解

标签:605,flowebed,day08,int,flowerbed,种花,位置,new
From: https://www.cnblogs.com/liqi175/p/17975454

相关文章

  • 吴师兄学算法day08 贪心 860. 柠檬水找零
    题目:860.柠檬水找零易错点:我写的是ifesle哈哈,第一次还写错了。i==20的时候,5元只找了1张。哈哈哈.应该找3张 我的代码:classSolution:deflemonadeChange(self,bills:List[int])->bool:dic={5:0,10:0,20:0}foriinbills:......
  • 吴师兄学算法day08 贪心 134. 加油站
    题目:134.加油站理解难点:理解比较难,就是遍历1遍,尽可能找局部满足要求的。如果总油耗满足要求。那局部油耗找的出发点就是对的。遍历的时候,因为答案唯一,要么就满足要求,要么不满足要求。而<0证明之前的都不满足要求,满足要求的一定在后面。这题还是个环,环这里有点没太理解。环......
  • 吴师兄学算法day08 贪心 LC455. 分发饼干
    题目:455. 分发饼干易错点:这两个变量名容易弄混s是饼干g是胃口图示:我的代码:classSolution:deffindContentChildren(self,g:List[int],s:List[int])->int:#对饼干s排序s.sort()#对孩子们的胃口g进行排序g.sort()......
  • day08-字典
    字典(Dict)是一种可变、无序的数据类型;那等等...我们回忆一下,字符串列表元祖是什么样的?字符串不可变,有序列表可变,有序元祖不可变,有序如何判断有序和无序呢,我首先确定在字符串、列表、元祖篇我们都讲到了切片取值,说明他们都是有顺序的,而字典是无序的,说明字典无法通过切片取值,......
  • P6054 题解
    blog。网络流——最小割。每个选手做某一套题的期望奖励固定,计算方式参考样例解释。这个假期望被去掉了。发现是典型的「\(m\)种强制选一」问题。考虑每个人都建一条链,跑最小割,每条链必定割\(\ge1\)条边,割哪条边就表示选哪套题。code,时间复杂度\(O(\text{能过})\)。......
  • Day08---IDEA
    Day08IDEA中的第一个代码IDEA项目结构介绍project(项目)module(模块)package(包)class(类)步骤:新建项目-->在项目内新建模块-->在新建模块内新建包-->在包内创建类常用的系统设置提示忽略大小写修改主题修改注释的颜色修改字体自动导包IDEA的项目和模块......
  • JavaWeb - Day08 - MySQL - 多表查询、事务、索引 - Mybatis - 入门
    01.MySQL-多表查询-概述数据准备#建议:创建新的数据库createdatabasedb04;usedb04;--部门表createtabletb_dept(idintunsignedprimarykeyauto_incrementcomment'主键ID',namevarchar(10)notnulluniquecomment'部门名称',......
  • Day08 逻辑结构(switch和增强for)
    1.知识点if,switch,for,while等等和C++、js等相似,需要注意以下几点:1.1有关switchswitch中的casevalue:value类型可以是byte,short,int,char。value类型:string类型是JDK7才开始支持的1.2有关增强forfor(元素类型变量名:需要遍历的数组或集合){......
  • Day08 Java关键字和标识符
    Java关键字和标识符首先Java的所有组成部分都需要有名字类名、方法名、变量名都被称为标识符如HelloWorld中publicclassHello{ publicstaticvoidmain(String[]args){Stringteacher="秦疆"; System.out.print("Hello,World!"); }}关键词有publicclas......
  • 20231121 rock5b 接入mpu6050模块 驱动成功!感谢https://github.com/LitchiCheng/mpu60
    我的rock5b安装的其radxa官方OS,里面有一个rsetup程序的overlay功能可以管理设备树,我想根据https://github.com/LitchiCheng/mpu6050-linux来尝试连接一个6050;先rsetup里面的overlay管理开启i2c8-m4设备节点,之后在/boot/dtco i2c8-m4设备节点已经启用现在......