day27-数据结构力扣

56. 合并区间

题目描述56. 合并区间 - 力扣(LeetCode)

思路

这道题的核心是先排序,再合并,通过排序让重叠 / 相邻的区间挨在一起,再遍历一次就能完成合并。

解题思路

  1. 特殊情况处理:如果输入数组为空,直接返回空数组。

  2. 排序 :按照区间的起始值从小到大排序,这样所有可能重叠的区间都会相邻。

  3. 遍历合并:

    • 初始化结果数组,放入第一个区间。

    • 遍历后续每个区间,与结果数组中最后一个区间比较:

      • 如果当前区间的起始值 ≤ 最后一个区间的结束值 → 重叠 / 相邻,合并(更新结束值为两者最大值)。

      • 如果当前区间的起始值 > 最后一个区间的结束值 → 不重叠,直接加入结果数组。

提交

python 复制代码
def merge(intervals):
    # 1. 处理空数组
    if not intervals:
        return []
    
    # 2. 按照区间的起始值排序
    intervals.sort(key=lambda x: x[0])
    
    # 3. 初始化结果数组,放入第一个区间
    res = [intervals[0]]
    
    # 4. 遍历剩余区间
    for current in intervals[1:]:
        # 取出结果数组中最后一个区间
        last = res[-1]
        # 判断是否重叠/相邻:当前区间起始 <= 最后一个区间的结束
        if current[0] <= last[1]:
            # 合并区间:更新结束值为最大值
            last[1] = max(last[1], current[1])
        else:
            # 不重叠,直接添加
            res.append(current)
    
    return res

738.单调递增的数字

题目链接738. 单调递增的数字 - 力扣(LeetCode)

思路

这道题的核心是用贪心算法 :从右往左检查数字,遇到前一位 > 后一位时,前一位减 1,后面所有位都变成 9,就能得到最大的单调递增数。

解题思路

  1. 转字符串 / 列表:方便逐位修改数字(整数无法直接修改某一位)。

  2. 从右往左遍历:

    • 如果当前位 < 前一位(不满足递增),前一位减 1,记录当前位置。

    • 把记录位置及后面所有位都设为 9(保证最大)。

  3. 转回整数:得到最终结果。

提交

python 复制代码
def monotoneIncreasingDigits(n: int) -> int:
    s = list(str(n))
    length = len(s)
    nine_start = length

    # 从右往左遍历
    for i in range(length - 2, -1, -1):
        if s[i] > s[i + 1]:
            s[i] = str(int(s[i]) - 1)
            nine_start = i + 1

    # 统一变成 字符串 '9',这是关键!
    for i in range(nine_start, length):
        s[i] = '9'  # 必须是字符串,不是数字

    return int(''.join(s))
相关推荐
轩轶子4 分钟前
Python CLI Todo:一次数据结构错误引发的 Bug
数据结构·python·bug
CQU_JIAKE1 小时前
9.28【A】
数据结构
code斗10 小时前
Java数据结构:堆详解
java·开发语言·数据结构
Elaine33612 小时前
数据结构与算法-程序
数据结构·python·算法·计算机基础·编程基础
Logic10113 小时前
C语言/数据结构位运算题解:异或XOR找出游戏速通中的“独特初始能量值“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
Bruce_Liuxiaowei15 小时前
Python 字典默认值完全指南:从 KeyError 到 defaultdict
开发语言·数据结构·python·字典
All for pursuit.19 小时前
【二叉树-10】114.二叉树展开为链表
数据结构·c++·算法·leetcode·链表
心中有你021421 小时前
C语言埃氏筛法(素数筛选)
c语言·数据结构·算法
释厄6231 天前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析
库玛西1 天前
攻克 408 数据结构:图论基石深度拆解(数学极值推演 + 存储内存剖析 + BFS/DFS 双核模板)
数据结构·算法·深度优先·广度优先·图搜索算法