Skip to content

Commit a904bdf

Browse files
Kevin Naughton JrKevin Naughton Jr
authored andcommitted
added new MergeIntervals.java solution
1 parent e81f4e5 commit a904bdf

File tree

5 files changed

+80
-110
lines changed

5 files changed

+80
-110
lines changed

company/facebook/MergeIntervals.java

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,31 @@
1313
* Interval(int s, int e) { start = s; end = e; }
1414
* }
1515
*/
16-
public class MergeIntervals {
16+
class MergeIntervals {
1717
public List<Interval> merge(List<Interval> intervals) {
18-
if(intervals.size() <= 1) {
19-
return intervals;
18+
List<Interval> result = new ArrayList<Interval>();
19+
if(intervals == null || intervals.size() == 0) {
20+
return result;
2021
}
2122

22-
// Sort by ascending starting point using an anonymous Comparator
23-
Collections.sort(intervals, new Comparator<Interval>() {
24-
@Override
25-
public int compare(Interval i1, Interval i2) {
26-
return Integer.compare(i1.start, i2.start);
27-
}
23+
Interval[] allIntervals = intervals.toArray(new Interval[intervals.size()]);
24+
Arrays.sort(allIntervals, new Comparator<Interval>() {
25+
public int compare(Interval a, Interval b) {
26+
if(a.start == b.start) {
27+
return a.end - b.end;
28+
}
29+
return a.start - b.start;
30+
}
2831
});
2932

30-
List<Interval> result = new ArrayList<Interval>();
31-
32-
int start = intervals.get(0).start;
33-
int end = intervals.get(0).end;
34-
35-
for(Interval interval : intervals) {
36-
if(interval.start <= end) {
37-
end = Math.max(end, interval.end);
33+
for(Interval i: allIntervals) {
34+
if (result.size() == 0 || result.get(result.size() - 1).end < i.start) {
35+
result.add(i);
3836
} else {
39-
result.add(new Interval(start, end));
40-
start = interval.start;
41-
end = interval.end;
37+
result.get(result.size() - 1).end = Math.max(result.get(result.size() - 1).end, i.end);
4238
}
4339
}
4440

45-
result.add(new Interval(start, end));
46-
4741
return result;
4842
}
4943
}

company/google/MergeIntervals.java

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,31 @@
1313
* Interval(int s, int e) { start = s; end = e; }
1414
* }
1515
*/
16-
public class MergeIntervals {
16+
class MergeIntervals {
1717
public List<Interval> merge(List<Interval> intervals) {
18-
if(intervals.size() <= 1) {
19-
return intervals;
18+
List<Interval> result = new ArrayList<Interval>();
19+
if(intervals == null || intervals.size() == 0) {
20+
return result;
2021
}
2122

22-
// Sort by ascending starting point using an anonymous Comparator
23-
Collections.sort(intervals, new Comparator<Interval>() {
24-
@Override
25-
public int compare(Interval i1, Interval i2) {
26-
return Integer.compare(i1.start, i2.start);
27-
}
23+
Interval[] allIntervals = intervals.toArray(new Interval[intervals.size()]);
24+
Arrays.sort(allIntervals, new Comparator<Interval>() {
25+
public int compare(Interval a, Interval b) {
26+
if(a.start == b.start) {
27+
return a.end - b.end;
28+
}
29+
return a.start - b.start;
30+
}
2831
});
2932

30-
List<Interval> result = new ArrayList<Interval>();
31-
32-
int start = intervals.get(0).start;
33-
int end = intervals.get(0).end;
34-
35-
for(Interval interval : intervals) {
36-
if(interval.start <= end) {
37-
end = Math.max(end, interval.end);
33+
for(Interval i: allIntervals) {
34+
if (result.size() == 0 || result.get(result.size() - 1).end < i.start) {
35+
result.add(i);
3836
} else {
39-
result.add(new Interval(start, end));
40-
start = interval.start;
41-
end = interval.end;
37+
result.get(result.size() - 1).end = Math.max(result.get(result.size() - 1).end, i.end);
4238
}
4339
}
4440

45-
result.add(new Interval(start, end));
46-
4741
return result;
4842
}
4943
}

company/linkedin/MergeIntervals.java

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,31 @@
1313
* Interval(int s, int e) { start = s; end = e; }
1414
* }
1515
*/
16-
public class MergeIntervals {
16+
class MergeIntervals {
1717
public List<Interval> merge(List<Interval> intervals) {
18-
if(intervals.size() <= 1) {
19-
return intervals;
18+
List<Interval> result = new ArrayList<Interval>();
19+
if(intervals == null || intervals.size() == 0) {
20+
return result;
2021
}
2122

22-
// Sort by ascending starting point using an anonymous Comparator
23-
Collections.sort(intervals, new Comparator<Interval>() {
24-
@Override
25-
public int compare(Interval i1, Interval i2) {
26-
return Integer.compare(i1.start, i2.start);
27-
}
23+
Interval[] allIntervals = intervals.toArray(new Interval[intervals.size()]);
24+
Arrays.sort(allIntervals, new Comparator<Interval>() {
25+
public int compare(Interval a, Interval b) {
26+
if(a.start == b.start) {
27+
return a.end - b.end;
28+
}
29+
return a.start - b.start;
30+
}
2831
});
2932

30-
List<Interval> result = new ArrayList<Interval>();
31-
32-
int start = intervals.get(0).start;
33-
int end = intervals.get(0).end;
34-
35-
for(Interval interval : intervals) {
36-
if(interval.start <= end) {
37-
end = Math.max(end, interval.end);
33+
for(Interval i: allIntervals) {
34+
if (result.size() == 0 || result.get(result.size() - 1).end < i.start) {
35+
result.add(i);
3836
} else {
39-
result.add(new Interval(start, end));
40-
start = interval.start;
41-
end = interval.end;
37+
result.get(result.size() - 1).end = Math.max(result.get(result.size() - 1).end, i.end);
4238
}
4339
}
4440

45-
result.add(new Interval(start, end));
46-
4741
return result;
4842
}
4943
}

company/twitter/MergeIntervals.java

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,31 @@
1313
* Interval(int s, int e) { start = s; end = e; }
1414
* }
1515
*/
16-
public class MergeIntervals {
16+
class MergeIntervals {
1717
public List<Interval> merge(List<Interval> intervals) {
18-
if(intervals.size() <= 1) {
19-
return intervals;
18+
List<Interval> result = new ArrayList<Interval>();
19+
if(intervals == null || intervals.size() == 0) {
20+
return result;
2021
}
2122

22-
// Sort by ascending starting point using an anonymous Comparator
23-
Collections.sort(intervals, new Comparator<Interval>() {
24-
@Override
25-
public int compare(Interval i1, Interval i2) {
26-
return Integer.compare(i1.start, i2.start);
27-
}
23+
Interval[] allIntervals = intervals.toArray(new Interval[intervals.size()]);
24+
Arrays.sort(allIntervals, new Comparator<Interval>() {
25+
public int compare(Interval a, Interval b) {
26+
if(a.start == b.start) {
27+
return a.end - b.end;
28+
}
29+
return a.start - b.start;
30+
}
2831
});
2932

30-
List<Interval> result = new ArrayList<Interval>();
31-
32-
int start = intervals.get(0).start;
33-
int end = intervals.get(0).end;
34-
35-
for(Interval interval : intervals) {
36-
if(interval.start <= end) {
37-
end = Math.max(end, interval.end);
33+
for(Interval i: allIntervals) {
34+
if (result.size() == 0 || result.get(result.size() - 1).end < i.start) {
35+
result.add(i);
3836
} else {
39-
result.add(new Interval(start, end));
40-
start = interval.start;
41-
end = interval.end;
37+
result.get(result.size() - 1).end = Math.max(result.get(result.size() - 1).end, i.end);
4238
}
4339
}
4440

45-
result.add(new Interval(start, end));
46-
4741
return result;
4842
}
4943
}

leetcode/array/MergeIntervals.java

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,31 @@
1313
* Interval(int s, int e) { start = s; end = e; }
1414
* }
1515
*/
16-
public class MergeIntervals {
16+
class MergeIntervals {
1717
public List<Interval> merge(List<Interval> intervals) {
18-
if(intervals.size() <= 1) {
19-
return intervals;
18+
List<Interval> result = new ArrayList<Interval>();
19+
if(intervals == null || intervals.size() == 0) {
20+
return result;
2021
}
2122

22-
// Sort by ascending starting point using an anonymous Comparator
23-
Collections.sort(intervals, new Comparator<Interval>() {
24-
@Override
25-
public int compare(Interval i1, Interval i2) {
26-
return Integer.compare(i1.start, i2.start);
27-
}
23+
Interval[] allIntervals = intervals.toArray(new Interval[intervals.size()]);
24+
Arrays.sort(allIntervals, new Comparator<Interval>() {
25+
public int compare(Interval a, Interval b) {
26+
if(a.start == b.start) {
27+
return a.end - b.end;
28+
}
29+
return a.start - b.start;
30+
}
2831
});
2932

30-
List<Interval> result = new ArrayList<Interval>();
31-
32-
int start = intervals.get(0).start;
33-
int end = intervals.get(0).end;
34-
35-
for(Interval interval : intervals) {
36-
if(interval.start <= end) {
37-
end = Math.max(end, interval.end);
33+
for(Interval i: allIntervals) {
34+
if (result.size() == 0 || result.get(result.size() - 1).end < i.start) {
35+
result.add(i);
3836
} else {
39-
result.add(new Interval(start, end));
40-
start = interval.start;
41-
end = interval.end;
37+
result.get(result.size() - 1).end = Math.max(result.get(result.size() - 1).end, i.end);
4238
}
4339
}
4440

45-
result.add(new Interval(start, end));
46-
4741
return result;
4842
}
4943
}

0 commit comments

Comments
 (0)