57. 插入区间

大美兴,川普王!🤩

  • 朴素

这条hard题看完就知道咋做,一度怀疑自己是不是想的太简单了。直接看题解发现就是这么简单。。。

思路很简单,初始化合并区间的开始与结束为新插入区间newInterval的开始与结束,如果新插入区间的开始在某个已有区间内,则该已有区间的开始为合并区间的开始。如果新插入区间的结束在某个已有区间内,则该已有区间的结束为合并区间的结束,并将合并区间加入答案列表。

处理几个边界条件:

  • 如果新插入区间的结束不在某个已有区间内,则判断到newBack < currPrev 时先将合并区间进入答案列表。
  • 如果遍历完了还是没有插入合并区间,则在答案输出前将合并区间进入答案列表。
class Solution {
public int[][] insert(int[][] intervals, int[] newInterval) {

int newPrev = newInterval[0];
int newBack = newInterval[1];

List<int[]> ansList = new ArrayList<int[]>();

int mixPrev = newPrev;
int mixBack = newBack;
boolean isInsert = false;
for (int[] i : intervals) {
int currPrev = i[0];
int currBack = i[1];
if(currBack < newPrev){
ansList.add(i);
}
if( currPrev <= newPrev && newPrev <= currBack){
mixPrev = currPrev;
}
if( currPrev <= newBack && newBack <= currBack){
mixBack = currBack;
ansList.add(new int[]{mixPrev,mixBack});
isInsert = true;
}
if(newBack < currPrev ){
if(isInsert == false){
ansList.add(new int[]{mixPrev,mixBack});
isInsert = true;
}
ansList.add(i);
}
}
if(isInsert == false){
ansList.add(new int[]{mixPrev,mixBack});
isInsert = true;
}
int [][]ans = new int[ansList.size()][2];
for (int i = 0; i < ans.length; i++) {
ans[i] = ansList.get(i);
}
return ans;
}
}