力扣算法刷题Day37|贪心:单调递增的数字 监控二叉树

力扣题目:#738.单调递增的数字 

刷题时长:参考题解后10min

解题方法:贪心

复杂度分析

  • 时间O(n)
  • 空间O(n)

问题总结

  • 思路不清

本题收获

  • 题解思路:例如98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]-1,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数
  • 先想到贪心思路,再决定从后向前的遍历顺序,两者都可以通过个例模拟后想通

力扣题目:#968.监控二叉树 

刷题时长:参考题解

解题方法:贪心+分类讨论

复杂度分析

  • 时间 O(n),需要遍历二叉树上的每个节点
  • 空间O(n)

问题总结

  • 思路不清

本题收获

  • 贪心思路:把摄像头放在叶子节点的父节点位置,才能充分利用摄像头的覆盖面积
    • 局部最优:让叶子节点的父节点安摄像头,所用摄像头最少
    • 整体最优:全部摄像头数量所用最少
  • 本题难点:

    • 二叉树的遍历:使用后序遍历就可以在回溯的过程中从下到上进行推导了
    • 如何隔两个节点放一个摄像头:状态转移
      • 0:该节点无覆盖
      • 1:本节点有摄像头
      • 2:本节点有覆盖
    • 空节点属于哪一状态:只能是有覆盖,这样就可以在叶子节点的父节点放摄像头了
  • 解题思路 分类讨论
    • 情况1 左右节点都有覆盖:中间节点应该就是无覆盖的状态了 return0
    • 情况2 左右节点至少有一个无覆盖:有一个孩子没有覆盖,父节点就应该放摄像头。此时摄像头的数量要加一,并且return 1,代表中间节点放摄像头
    • 情况3 左右节点至少有一个有摄像头:左右孩子节点有一个有摄像头了,那么其父节点就被覆盖了,返回状态2
    • 情况4 根结点没有覆盖:递归结束之后,还要判断根节点,如果没有覆盖,result+1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值