中级农民
- 积分
- 155
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-4-17
- 最后登录
- 1970-1-1
|
根据楼主的意思,重新改了下代码,谢谢
- public class MergeIntervalsIII {
- public static void main(String[] args) {
- List<Interval> intervals = new ArrayList<Interval>();
- intervals.add(new Interval(4, 8));
- intervals.add(new Interval(3, 4));
- intervals.add(new Interval(-1, 2));
- intervals.add(new Interval(10, 12));
- List<Interval> res = mergeIntervals(intervals);
- for (Interval interval : res) {
- System.out.println(interval.start + " " + interval.end);
- }
- }
-
- static class Interval {
- int start;
- int end;
- Interval() {
- start = 0;
- end = 0;
- }
- Interval(int s, int e) {
- start = s;
- end = e;
- }
- }
-
- /*
- intervals.add(new Interval(4, 8));
- intervals.add(new Interval(3, 5));
- intervals.add(new Interval(-1, 5));
- intervals.add(new Interval(10, 12));
- 这个case 应该是返回(10, 12)
- */
- public static List<Interval> mergeIntervals(List<Interval> intervals) {
- List<Interval> res = new ArrayList<Interval>();
- if (intervals == null || intervals.size() == 0) {
- return res;
- }
- Collections.sort(intervals, new Comparator<Interval>(){
- public int compare(Interval i1, Interval i2) {
- if (i1.start == i2.start) {
- return i1.end - i2.end;
- }
-
- return i1.start - i2.start;
- }
- });
- List<Interval> list = new ArrayList<Interval>();
- boolean[] isOverlap = new boolean[intervals.size()];
- list.add(intervals.get(0));
- for (int i = 1; i < intervals.size(); i++) {
- if (intervals.get(i).start < list.get(list.size() - 1).end) {
- isOverlap[i] = true;
- isOverlap[i - 1] = true;
- list.get(list.size() - 1).end = Math.max(list.get(list.size() - 1).end, intervals.get(i).end);
- } else {
- list.add(intervals.get(i));
- }
- }
- for (int i = 0; i < intervals.size(); i++) {
- if (!isOverlap[i]) {
- res.add(intervals.get(i));
- }
- }
- return res;
- }
- }
复制代码 |
|