当前位置: 首页 > 后端技术 > Java

LeetCode-057-InsertInterval

时间:2023-04-01 21:07:22 Java

InsertInterval题目描述:给你一个非重叠的区间列表,按照区间的起点和终点排序。要将新区间插入列表,您需要确保列表中的区间仍然有序且不重叠(必要时合并区间)。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:遍历数组首先,如果intervals为空,因为不需要处理merge,所以直接返回一个intervalnewInterval;如果intervals不为空,声明一个变量length来记录区间的区间数,然后在以下情况下处理:如果新区间newInterval的最大值小于所有区间interval的最小值,则不需要合并,将新的区间放在区间的顶部,然后返回;如果新区间newInterval的最小值大于所有区间interval的最大值,则不需要合并,将新区间放在intervals的末尾,然后返回;如果前面两种情况都不存在,则用matchFirst和matchSecond记录newInterval的两个数,newLength是新区间的个数,初始length+1,用一个boolean数组flag记录区间合并了哪些区间,然后遍历区间的所有区间:curFirst和curSecond为当前区间的两个数,使用matchFirst,matchSecond,curFirst,curSecond判断两个区间是否相交,相交则更新matchFirst和matchSecond的值,并更新identity要合并的当前间隔。遍历完成后,初始化一个新的区间数组newIntervals,将新的区间{matchFirst,matchSecond}和区间放入newIntervals,将未合并的区间放入newIntervals(需要判断新区间的合适位置),然后返回newIntervals.publicclassLeetCode_057{publicstaticint[][]insert(int[][]intervals,int[]newInterval){if(intervals==null||intervals.length==0){returnnewint[][]{新间隔};}intlength=intervals.length;if(newInterval[1]intervals[length-1][1]){//如果新区间的最小值大于所有区间的最大值,则不需要合并,把新的间隔结束时的间隔int[][]newIntervals=newint[length+1][2];for(inti=0;i=curFirst&&matchFirst<=curSecond)||(matchSecond>=curFirst&&matchSecond<=curSecond))||((curFirst>=matchFirst&&curFirst<=matchSecond)||(curSecond>=matchFirst&&curSecond<=matchSecond))){//有交集matchFirst=Math.min(matchFirst,curFirst);matchSecond=Math.max(matchSecond,curSecond);标志[i]=真;新长度--;}}int[][]newIntervals=newint[newLength][2];布尔值添加=假;int位置=0;for(inti=0;i