280 字
1 分钟
代码随想录算法训练营第二十七天 | 贪心算法 Part05

56. 合并区间#

LeetCode 56. Merge Intervals

  • 先按起点升序排序;
  • 然后遍历每个区间:
    • 如果当前区间起点小于等于结果中最后区间的终点,说明重叠 → 合并;
    • 否则为不重叠 → 直接加入结果。
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
res = []
# 先按起点排序
intervals.sort(key=lambda x: x[0])
res.append(intervals[0]) # 初始化结果列表
for i in range(1, len(intervals)):
cur = intervals[i]
end = res[-1]
if cur[0] <= end[1]:
# 区间重叠,合并
end[1] = max(end[1], cur[1])
else:
# 不重叠,直接添加
res.append(cur)
return res

738. 单调递增的数字#

LeetCode 738. Monotone Increasing Digits

  • 从右向左遍历字符串;
  • 一旦发现前一位大于后一位,就将前一位 -1,并将后面所有位置改为 9;
  • 因为此时要保证变小,且尽可能大。
class Solution:
def monotoneIncreasingDigits(self, n: int) -> int:
num_list = list(str(n))
# 从右往左找第一个出现递减的位置
for i in range(len(num_list) - 1, 0, -1):
if num_list[i - 1] > num_list[i]:
# 前一位比后一位大,当前位减一,后续全部置为 9
num_list[i - 1] = str(int(num_list[i - 1]) - 1)
for j in range(i, len(num_list)):
num_list[j] = '9'
return int(''.join(num_list))
代码随想录算法训练营第二十七天 | 贪心算法 Part05
https://fuwari.vercel.app/posts/code_musings_day_twenty-seven/
作者
Jarrett
发布于
2025-07-11
许可协议
CC BY-NC-SA 4.0