Java for LeetCode 056 Merge Intervals
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18]
,
return [1,6],[8,10],[15,18]
.
解题思路一:
用两个指针startIndex和endIndex来维护每次添加intervals的start和end的位置,然后分类讨论即可,JAVA实现如下:
public List<Interval> merge(List<Interval> intervals) {
List<Interval> list = new ArrayList<Interval>();
if (intervals.size() == 0)
return list;
list.add(intervals.get(0));
for (int i = 1; i < intervals.size(); i++) {
Interval temp = intervals.get(i);
int startIndex = 0, endIndex = 0;
for (int j = 0; j < list.size(); j++) {
if (temp.start > list.get(j).end) {
startIndex += 2;
endIndex += 2;
continue;
}
if (temp.end < list.get(j).start)
break;
if (temp.start >= list.get(j).start)
startIndex++;
if (temp.end > list.get(j).end) {
endIndex += 2;
continue;
}
if (temp.end >= list.get(j).start)
endIndex++;
break;
}
if(startIndex==endIndex&&startIndex%2==0)
list.add(startIndex/2,new Interval(temp.start,temp.end));
else if(startIndex%2==0&&endIndex%2==0){
list.get(startIndex/2).start=temp.start;
list.get(startIndex/2).end=temp.end;
for(int k=1;k<endIndex/2-startIndex/2;k++)
list.remove(startIndex/2+1);
}
else if(startIndex%2==0&&endIndex%2!=0){
list.get(startIndex/2).start=temp.start;
list.get(startIndex/2).end=list.get(endIndex/2).end;
for(int k=1;k<=endIndex/2-startIndex/2;k++)
list.remove(startIndex/2+1);
}
else if(startIndex%2!=0&&endIndex%2==0){
list.get(startIndex/2).end=temp.end;
for(int k=1;k<endIndex/2-startIndex/2;k++)
list.remove(startIndex/2+1);
}
else if(startIndex%2!=0&&endIndex%2!=0){
list.get(startIndex/2).end=list.get(endIndex/2).end;
for(int k=1;k<=endIndex/2-startIndex/2;k++)
list.remove(startIndex/2+1);
}
}
return list;
}
解题思路二:
首先构造一个比较器,对interval按照start进行排序,然后进行遍历,在遍历过程中,如果结果集合为空或者当前interval
与结果集合中的最后一个interval
不重叠,那么就直接将当前interval
直接加入到结果集合中;如果发生了重叠,那么将结果集合的最后一个interval
的右端点改为当前interval
的右端点,JAVA实现如下:
public List<Interval> merge(List<Interval> intervals) {
List<Interval> list = new ArrayList<Interval>();
Comparator<Interval> comparator = new Comparator<Interval>() {
@Override
public int compare(Interval o1, Interval o2) {
if (o1.start == o2.start)
return o1.end - o2.end;
return o1.start - o2.start;
}
};
Collections.sort(intervals, comparator);
for (Interval interval : intervals)
if (list.size() == 0 || list.get(list.size() - 1).end < interval.start)
list.add(new Interval(interval.start, interval.end));
else
list.get(list.size() - 1).end = Math.max(interval.end, list.get(list.size() - 1).end);
return list;
}
Java for LeetCode 056 Merge Intervals的更多相关文章
- Java for LeetCode 023 Merge k Sorted Lists
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 解 ...
- [Leetcode Week2]Merge Intervals
Merge Intervals题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/merge-intervals/description/ Descript ...
- 【LeetCode】Merge Intervals 题解 利用Comparator进行排序
题目链接Merge Intervals /** * Definition for an interval. * public class Interval { * int start; * int e ...
- 【leetcode】Merge Intervals
Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given ...
- 【leetcode】Merge Intervals(hard)
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
- 【leetcode】 Merge Intervals
Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given ...
- leetcode 56. Merge Intervals 、57. Insert Interval
56. Merge Intervals是一个无序的,需要将整体合并:57. Insert Interval是一个本身有序的且已经合并好的,需要将新的插入进这个已经合并好的然后合并成新的. 56. Me ...
- LeetCode 56. Merge Intervals 合并区间 (C++/Java)
题目: Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6] ...
- LeetCode 56. Merge Intervals (合并区间)
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
随机推荐
- 学习笔记-动态树Link-Cut-Tree
--少年你有梦想吗? --少年你听说过安利吗? 安利一个集训队讲解:http://wenku.baidu.com/view/75906f160b4e767f5acfcedb 关于动态树问题,有多种方法 ...
- 排序算法(一)(时间复杂度均为O(n*n))
对于一个int数组,请编写一个选择排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 冒泡排序 ...
- Mac上的终端(Terminal)启动缓慢
最近重装10.9系统,装完后,发现终端(Terminal)启动之前1秒都不用,现在却需要5-10秒,搜寻了下,发现是终端的统日志导致的问题,只需要执行下下面的命令,终端就又身轻如燕了! sudo rm ...
- cheerio, dom操作模块
cheerio 为服务器特别定制的,快速.灵活.实施的jQuery核心实现. Introduction 将HTML告诉你的服务器 var cheerio = require('cheerio'), $ ...
- 初学Hibernate之Query扩展
1.hql参数化查询,不明确值类型的用setParameter方法:明确查询结果为一条记录的用uniqueResult方法查询 注意,参数化查询中方法setString 或 setParameter如 ...
- Redis配置文件主要功能说明
原文地址:http://blog.csdn.net/htofly/article/details/7686436 配置文件参数说明: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改 ...
- Web Service(1.8)
“基于 XMLWeb Service 的 Java API”(JAX-WS)通过使用注释来指定与 Web Service 实现相关联的元数据以及简化 Web Service 的开发.注释描述如何将 ...
- mySQL 增量备份方案(转)
1.在 /etc/my.cnf 下面设置开启bin-log 编辑 vim /etc/my.cnf [mysqld] binlog_format = MIXED ...
- 复合主键@IdClass
有时一个实体的主键可能同时为多个,例如同样是之前使用的“CustomerEO”实体,需要通过name和email来查找指定实体,当且仅当name和email的值完全相同时,才认为是相同的实体对象.要配 ...
- 闲来无事,用Java的软引用写了一个山寨的缓存
闲来无事,用Java的软引用写了一个山寨的缓存 博客分类: java基础 众所周知java中的引用分为 StrongReference.SoftReference.WeakReference.Phan ...