Given a collection of intervals, merge all overlapping intervals.
Input: [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]
Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
class Solution {
public int[][] merge(int[][] intervals) {
while(true){
boolean changes = false;
loopie:
for(int i = 0; i < intervals.length; i++){
int[] interval1 = intervals[i];
int beg1 = interval1[0];
int end1 = interval1[1];
for(int j = i+1; j < intervals.length; j++){
int[] interval2 = intervals[j];
int beg2 = interval2[0];
int end2 = interval2[1];
int beg3 = 0;
int end3 = 0;
if(beg1 == beg2 && end1 == end2) continue;
if(beg1 >= beg2 && beg1 <= end2 || end1 <= end2 && end1 >=beg2){
changes = true;
beg3 = Math.min(beg1,beg2);
end3 = Math.max(end1,end2);
}
else if(beg2 >= beg1 && beg2 <= end1 || end2 <= end1 && end2 >=beg1){
changes = true;
beg3 = Math.min(beg1,beg2);
end3 = Math.max(end1,end2);
}
if(changes){
intervals[i][0] = beg3;
intervals[i][1] = end3;
intervals[j][0] = beg3;
intervals[j][1] = end3;
i = 0;
j = 0;
break loopie;
}
}
}
if(!changes) break;
}
HashSet<String> unique = new HashSet<>();
for(int[] i : intervals){
unique.add(i[0]+","+i[1]);
}
int[][] result = new int[unique.size()][2];
int counter = 0;
for(String interval : unique){
String[] values = interval.split(",");
result[counter][0] = Integer.parseInt(values[0]);
result[counter][1] = Integer.parseInt(values[1]);
counter++;
}
return result;
}
}