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 转换为二维数组并返回,该数组即为合并后的区间数组。
相关推荐
地平线开发者5 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮5 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者5 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考6 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx9 小时前
CART决策树基本原理
算法·机器学习
Wect9 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱10 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway17 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风17 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect17 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript