大美兴,川普王!🤩
这条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; } }
|