代码随想录 | Day37 | 2023.09.20 |贪心06+总结

今日题目:

738. 单调递增的数字
968. 监控二叉树

今日总结

今天题目没啥说的,968暂时跳过。主要是总结这几天的贪心题目,尽管贪心没有啥固定套路。

738. 单调递增的数字

要点

  1. 也不算难题。想清楚贪心的流程。
  2. 从后往前遍历,因为后面的数字应该较大。当发现前一位大于后一位时,便将前一位自减1,然后把之后所有数字设置为9,这样就能确保当高位变化时,合成的数字尽可能大。
    代码:
func monotoneIncreasingDigits(n int) int {
    s := strconv.Itoa(n)//将数字转为字符串,方便使用下标
    ss := []byte(s)//将字符串转为byte数组,方便更改。
    size := len(ss)
    if size <=1 {
        return n 
    }
    for i := size-1;i>0;i--{
        if ss[i-1] > ss[i] {
            ss[i-1] -= 1
            for j := i; j < size;j++ {
                ss[j] = '9'
            }
        }
    }
    res, _ := strconv.Atoi(string(ss))
    return res 
}

968. 监控二叉树(跳过)

贪心总结

贪心的核心思想在于使用局部最优来推导全局最优。
如果发现能有局部最优并且没有反例的时候就能试试贪心。这几天的贪心涉及到求和与考虑范围最大化,可以自己举简单例子推导一下。
另外值得一提的是涉及两个维度的题目必须将维度拆分两次处理,考虑好怎么处理才不会影响另外一个维度。
重叠区间题目是有套路的,首先先进行排序,然后根据左右边界的关系来写逻辑。编写时要记住怎么写sort.slice函数。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值