2025-3-13 leetcode刷题情况(贪心算法--区间问题)

一、763.划分字母区间

1.题目描述

2.代码

3.思路

  • 统计每一个字符最后出现的位置
  • 从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点

二、56.合并区间

1.题目描述

2.代码

3.思路

先排序,让所有的相邻区间尽可能的重叠在一起。

  1. 使用 Arrays.sort 方法对 intervals 数组按照区间的起始位置进行排序。通过 (x, y) -> Integer.compare(x[0], y[0]) 作为比较器,确保区间按起始位置从小到大排列。
  2. 初始化合并区间的起始位置和右边界 :将第一个区间的起始位置 intervals[0][0] 赋值给 start,作为当前合并区间的起始位置;将第一个区间的结束位置 intervals[0][1] 赋值给 rightmostRightBound,作为当前合并区间的右边界。
  3. 遍历区间数组 :从第二个区间开始遍历,对于每个区间 intervals[i]
    • 若当前区间的起始位置 intervals[i][0] 大于当前合并区间的右边界 rightmostRightBound,说明当前区间与之前的合并区间不重叠。此时,将之前的合并区间 [start, rightmostRightBound] 添加到结果列表 res 中,并更新 start 为当前区间的起始位置 intervals[i][0]rightmostRightBound 为当前区间的结束位置 intervals[i][1]
    • 若当前区间的起始位置 intervals[i][0] 小于或等于当前合并区间的右边界 rightmostRightBound,说明当前区间与之前的合并区间重叠。此时,更新 rightmostRightBound 为当前合并区间右边界和当前区间结束位置的较大值,即 rightmostRightBound = Math.max(rightmostRightBound, intervals[i][1])
  4. 添加最后一个合并区间 :遍历结束后,将最后一个合并区间 [start, rightmostRightBound] 添加到结果列表 res 中。
  5. 返回结果 :将结果列表 res 转换为二维数组并返回,该数组即为合并后的区间数组。
相关推荐
问商十三载12 小时前
2026法律行业AI引擎生成式优化怎么优化?三层专业加固提排名,零成本提33%引用率附适配表
java·前端·人工智能·算法
zander25812 小时前
138. 随机链表的复制
数据结构·算法·链表
过期动态12 小时前
【LeetCode 热题 100】找到字符串中所有字母异位词
java·数据结构·算法·leetcode·职场和发展·rabbitmq
来一碗刘肉面12 小时前
栈在递归中的应用
数据结构·算法
8K超高清12 小时前
博冠获中国电影电视技术学会科技进步奖
人工智能·科技·算法·安全·接口隔离原则·智能硬件
微石科技13 小时前
长期慢病如何做好居家管理?宁波微石科技星梦云康改善周期数据零散短板
大数据·科技·物联网·算法
微露清风13 小时前
快速排序算法学习记录
学习·算法·排序算法
梓䈑18 小时前
【算法题攻略】BFS 解决FloodFill 算法、最短路问题、多源BFS 和 拓扑排序
c++·算法·宽度优先
Adios79421 小时前
设置交集大小至少为2
数据结构·算法·leetcode