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

打印 上一主题 下一主题

主题 989|帖子 989|积分 2967

一、763.分别字母区间

1.标题描述


2.代码


3.思绪



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

1.标题描述


2.代码


3.思绪

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

  • 使用 Arrays.sort 方法对 intervals 数组按照区间的起始位置进行排序。通过 (x, y) -> Integer.compare(x[0], y[0]) 作为比较器,确保区间按起始位置从小到大排列。
  • 初始化合并区间的起始位置和右边界:将第一个区间的起始位置 intervals[0][0] 赋值给 start,作为当前合并区间的起始位置;将第一个区间的竣事位置 intervals[0][1] 赋值给 rightmostRightBound,作为当前合并区间的右边界。
  • 遍历区间数组:从第二个区间开始遍历,对于每个区间 intervals

    • 若当前区间的起始位置 intervals[0] 大于当前合并区间的右边界 rightmostRightBound,说明当前区间与之前的合并区间不重叠。此时,将之前的合并区间 [start, rightmostRightBound] 添加到结果列表 res 中,并更新 start 为当前区间的起始位置 intervals[0],rightmostRightBound 为当前区间的竣事位置 intervals[1]。
    • 若当前区间的起始位置 intervals[0] 小于或等于当前合并区间的右边界 rightmostRightBound,说明当前区间与之前的合并区间重叠。此时,更新 rightmostRightBound 为当前合并区间右边界和当前区间竣事位置的较大值,即 rightmostRightBound = Math.max(rightmostRightBound, intervals[1])。

  • 添加最后一个合并区间:遍历竣过后,将最后一个合并区间 [start, rightmostRightBound] 添加到结果列表 res 中。
  • 返回结果:将结果列表 res 转换为二维数组并返回,该数组即为合并后的区间数组。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表