问题描述:给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
上代码(拿去即可运行):思路看代码中的注释
public class Combine {
public static void main(String[] args) {
/*** 使用treeMap给所有的集合,按照key升序。*/
Map<Integer,Integer> map=new TreeMap<>();
map.put(15,18);
map.put(1,3);
map.put(8,10);
map.put(2,6);
/***把key转成list*/
List<Integer>listKey=new ArrayList<>(map.keySet());
for (int i = 0; i < listKey.size()-1; i++) {
//第二个区间的首数字大于等于 第一个区间的首数字,而且第二个区间的首数字小于等于一个区间的第二个数字。
if(listKey.get(i)<=listKey.get(i+1)&&listKey.get(i+1)<=map.get(listKey.get(i))){
//合并:即key为第一个区间的第一个数字,value为(第一个区间的第二个数字和第二个区间第二个数字)中的的最大值
map.put(listKey.get(i),max(map.get(listKey.get(i)),map.get(listKey.get(i+1))));
//删除第二个区间
map.remove(listKey.get(i+1));
i++;
}
}
System.out.println("***********************************");
for (Integer integer : map.keySet()) {
System.out.println(integer+"======onlyqi========"+map.get(integer));
}
}
public static Integer max(Integer a,Integer b){
if(a>b){
return a;
}else {
return b;
}
}
}
运行结果:
我要刷100道算法题,第14道