Can somebody help me refine my fussy solution?


  • 0
    O
    import java.util.LinkedList;
    import java.util.List;
    public class Solution {
    public  List<Interval> merge(List<Interval> intervals) {
            int length = intervals.size();
            if(length==0) return new LinkedList<Interval>();
            int mid = length/2;
            if(length==1){
            	return intervals;
            }
            List<Interval> l1 = intervals.subList(0, mid);
            List<Interval> l2 = intervals.subList(mid, length);
            return ListMerge(merge(l1),merge(l2));
        }
        public  Interval ElementMerge(Interval a, Interval b){
        	if(a.start<=b.start && a.end>=b.end){
        		return new Interval(a.start,a.end);
        	}else if(b.start<=a.start && b.end>=a.end){
        		return new Interval(b.start,b.end);
        	}else if(a.start<=b.start && a.end>=b.start){
        		return new Interval(a.start,b.end);
        	}else if(b.start<=a.start && b.end>=a.start){
        		return new Interval(b.start,a.end);
        	}
        	return null;
        }
        public  List<Interval> ListMerge(List<Interval> l1,List<Interval> l2){
        List<Interval> res = new LinkedList<Interval>();
        	int i=0,j=0;
        	while(i<l1.size() && j<l2.size()){
        		if(l1.get(i).end<l2.get(j).start){
        			int len = res.size();
        			if(len!=0){
        				Interval tmp = res.get(len-1);
        				if(tmp.end>=l1.get(i).start){
        					res.remove(len-1);
        					res.add(ElementMerge(tmp,l1.get(i)));
        				}else{
        					res.add(l1.get(i));
        				}
        				i++;
        			}else{
        				res.add(l1.get(i));
        				i++;
        			}
        		}else if(l2.get(j).end<l1.get(i).start){
        			int len = res.size();
        			if(len!=0){
        				Interval tmp = res.get(len-1);
        				if(tmp.end>=l2.get(j).start){
        					res.remove(len-1);
        					res.add(ElementMerge(tmp,l2.get(j)));
        				}else{
        					res.add(l2.get(j));
        				}
        				j++;
        			}else{
        				res.add(l2.get(j));
        				j++;
        			}
        		}else{
        			Interval tmp = ElementMerge(l1.get(i),l2.get(j));
        			int len = res.size();
        			if(len!=0){
        				Interval last = res.get(len-1);
        				if(last.end>=tmp.start){
        					res.remove(len-1);
        					res.add(ElementMerge(tmp,last));
        				}else{
        					res.add(tmp);
        				}
        				j++;
        				i++;
        			}else{
        				res.add(tmp);
        				i++;
        				j++;
        			}
        		}
        	}
        	while(i<l1.size()){
        		int len = res.size();
        		Interval tmp = res.get(len-1);
        		if(tmp.end>=l1.get(i).start){
        			res.remove(len-1);
        			res.add(ElementMerge(tmp,l1.get(i)));
        		}else{
        		res.add(l1.get(i));
        		}
        		i++;
        	}
        	while(j<l2.size()){
        		int len = res.size();
        		Interval tmp = res.get(len-1);
        		if(tmp.end>=l2.get(j).start){
        			res.remove(len-1);
        			res.add(ElementMerge(tmp,l2.get(j)));
        		}else{
        		res.add(l2.get(j));
        		}
        		j++;
        	}
        	return res;
        }
    }

Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.