给出一个无重叠的按照区间起始端点排序的区间列表。
在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
#####样例
插入区间[2, 5] 到 [[1,2], [5,9]],我们得到 [[1,9]]。
插入区间[3, 4] 到 [[1,2], [5,9]],我们得到 [[1,2], [3,4], [5,9]]。
思路:先加入list正确的位置,再合并可以合并的项,代码写得烂且长,谅解。
/**
* Definition of Interval:
* public classs Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
*/
public class Solution {
/*
* @param intervals: Sorted interval list.
* @param newInterval: new interval.
* @return: A new interval list.
*/
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
// write your code here
int flag=0;
int i;
//加入区间
if(intervals.size()>0){
for(i=0;i<intervals.size();i++){
if(intervals.get(i).start<newInterval.start){
continue;
}
if(intervals.get(i).start>newInterval.start){
intervals.add(i,newInterval);
flag=1;
break;
}
if(intervals.get(i).start==newInterval.start){
if(intervals.get(i).end<=newInterval.end){
continue;
}else{
intervals.add(i,newInterval);
flag=1;
break;
}
}
}}
else{
intervals.add(0,newInterval);
return intervals;
}
if(flag==0){
intervals.add(intervals.size(),newInterval);
}
//合并区间
for(i=0;i<intervals.size()-1;i++){
int f=i;
int s=i+1;
if(intervals.get(f).end>=intervals.get(s).start&&intervals.get(f).end<=intervals.get(s).end){
Interval in=new Interval(intervals.get(f).start,intervals.get(s).end);
intervals.add(s+1,in);
intervals.remove(f);
intervals.remove(f);
i--;
continue;
}else if(intervals.get(f).end>=intervals.get(s).end){
intervals.remove(s);
i--;
continue;
}
}
return intervals;
}
}
此文章仅代表自己(本菜鸟)学习积累记录,或者学习笔记,如有侵权,请联系作者删除。人无完人,文章也一样,文笔稚嫩,在下不才,勿喷,如果有错误之处,还望指出,感激不尽~
技术之路不在一时,山高水长,纵使缓慢,驰而不息。
公众号:秦怀杂货店