day31 第八章 贪心算法 part05

56. 合并区间

先排序,再合并

python 复制代码
class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort(key=lambda x:x[0])

        merged = []
        # merged.append(intervals[0])
        for i in range(len(intervals)):
            if not merged or intervals[i][0]>merged[-1][1]:
                merged.append(intervals[i])
            else:
                merged[-1][1] = max(merged[-1][1], intervals[i][1])


        return merged

738.单调递增的数字

"本题只要想清楚个例,例如98,一旦出现strNumi - 1 > strNumi的情况(非单调递增),首先想让strNumi - 1减一,strNumi赋值9,这样这个整数就是89。就可以很自然想到对应的贪心解法了。

想到了贪心,还要考虑遍历顺序,只有从后向前遍历才能重复利用上次比较的结果。

最后代码实现的时候,也需要一些技巧,例如用一个flag来标记从哪里开始赋值9。" ---《代码随想录》

python 复制代码
class Solution:
    def monotoneIncreasingDigits(self, n: int) -> int:
        str_n = list(str(n))
        flag = len(str_n)
        # print(str_n)
        # result = []
        for i in range(len(str_n)-1, 0, -1):
            if str_n[i] < str_n[i-1]:
                flag = i
                str_n[i-1] = chr(ord(str_n[i-1])-1)

        for i in range(flag, len(str_n)):
            str_n[i] = '9'
        return int(''.join(str_n))
                

968.监控二叉树 (可跳过)

思路:监控都不在叶子节点,所以从底向上遍历,后序遍历,分3种情况,最后根节点也要判断一下。

python 复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
# 1有监控,0无覆盖,2有覆盖
class Solution:
    result = 0
    def traversal(self, node: Optional[TreeNode]) -> int:
        if not node:
            return 2

        left = self.traversal(node.left)
        right = self.traversal(node.right)

        if left == 0 or right == 0:
            self.result += 1
            return 1
        
        if left == 1 or right == 1:
            return 2
        
        if left == 2 and right == 2:
            return 0

       
    def minCameraCover(self, root: Optional[TreeNode]) -> int:
        self.result = 0
        if self.traversal(root)==0:
            self.result += 1
        return self.result
相关推荐
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark3 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her13 天前
并查集-听课笔记
笔记·算法·并查集
码流子3 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven3 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark3 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法