一、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[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])
。
- 若当前区间的起始位置
- 添加最后一个合并区间 :遍历结束后,将最后一个合并区间
[start, rightmostRightBound]
添加到结果列表res
中。 - 返回结果 :将结果列表
res
转换为二维数组并返回,该数组即为合并后的区间数组。