首页 > 其他分享 >[LeetCode]Insert Interval

[LeetCode]Insert Interval

时间:2023-02-02 15:37:49浏览次数:45  
标签:Insert newInterval Interval start intervals ans new LeetCode before


Question
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

You may assume that the intervals were initially sorted according to their start times.

Example 1:
Given intervals ​​​[1,3],[6,9]​​​, insert and merge ​​[2,5]​​​ in as ​​[1,5],[6,9]​​.

Example 2:
Given ​​​[1,2],[3,5],[6,7],[8,10],[12,16]​​​, insert and merge ​​[4,9]​​​ in as ​​[1,2],[3,10],[12,16]​​.

This is because the new interval ​​[4,9]​​​ overlaps with ​​[3,5],[6,7],[8,10]​​.


本题难度Hard。

【复杂度】
时间 O(N) 空间 O(N)

【思路】
这道题目与​​[LeetCode]Merge Intervals​​很像,不过这里有个前提你得看到:​​intervals​​​已经根据其​​start​​进行过排序,所以就不用再进行排序了(实际上不排序照样能做出来)。我们只要对三种情况进行处理:

1、间隔在newInterval之前(不重叠)。放入before
2、间隔在newInterval之后(不重叠)。放入after
3、间隔与newInterval重叠。重叠操作

然后把​​before、newInterval、after​​​放入​​ans​​即可。

【注意】
返回的​​​ans​​​要求是按​​start​​排序的。

【附】
把​​​before、after​​​放入​​ans​​​可以使用方法​​addAll​​。

【代码】

public class Solution {
public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
//require
if(newInterval==null)
return intervals;
List<Interval> ans=new LinkedList<Interval>(),before=new LinkedList<Interval>(),after=new LinkedList<Interval>();
//invariant
for(Interval i:intervals){
if(newInterval.end<i.start)
after.add(i);
else if(i.end<newInterval.start)
before.add(i);
else{
newInterval.start=Math.min(i.start,newInterval.start);
newInterval.end=Math.max(i.end,newInterval.end);
}
}
ans.addAll(before);
ans.add(newInterval);
ans.addAll(after);
//ensure
return ans;
}
}


标签:Insert,newInterval,Interval,start,intervals,ans,new,LeetCode,before
From: https://blog.51cto.com/u_9208248/6033687

相关文章

  • [LeetCode]Merge Intervals
    Question本题难度Hard。排序+双指针【复杂度】时间O(Nlog(N))空间O(N)【思路】先按照每个元素的​​​start​​​从小到大进行排序。然后利用双指针法,设置区间​​......
  • [LeetCode]Maximum Subarray
    QuestionFindthecontiguoussubarraywithinanarray(containingatleastonenumber)whichhasthelargestsum.Forexample,giventhearray[-2,1,-3,4,-1,2,1......
  • [LeetCode]Spiral Matrix
    QuestionGivenamatrixofmxnelements(mrows,ncolumns),returnallelementsofthematrixinspiralorder.Forexample,Giventhefollowingmatrix:[[1......
  • [LeetCode]N-Queens II
    QuestionFollowupforN-Queensproblem.Now,insteadoutputtingboardconfigurations,returnthetotalnumberofdistinctsolutions.本题难度Hard。【思路】​N......
  • [LeetCode]Group Anagrams
    QuestionGivenanarrayofstrings,groupanagramstogether.Forexample,given:[“eat”,“tea”,“tan”,“ate”,“nat”,“bat”],Return:[[“ate”,“......
  • [LeetCode]Jump Game II
    QuestionGivenanarrayofnon-negativeintegers,youareinitiallypositionedatthefirstindexofthearray.Eachelementinthearrayrepresentsyourmaximu......
  • [LeetCode]Rotate Image
    QuestionYouaregivenannxn2Dmatrixrepresentinganimage.Rotatetheimageby90degrees(clockwise).Followup:Couldyoudothisin-place?本题难度Mediu......
  • INSERT INTO .. ON DUPLICATE KEY更新多行记录
     现在问题来了,如果INSERT多行记录,ONDUPLICATEKEYUPDATE后面字段的值怎么指定?要知道一条INSERT语句中只能有一个ONDUPLICATEKEYUPDATE,到底他会更新一行记录,还是更新......
  • LeetCode 1143_ 最长公共子序列
    LeetCode1143:最长公共子序列题目给定两个字符串text1和text2,返回这两个字符串的最长公共子序列的长度。如果不存在公共子序列,返回0。一个字符串的子序列......
  • 【DFS】LeetCode 124. 二叉树中的最大路径和
    题目链接124.二叉树中的最大路径和思路一个子树内部的最大路径和=左子树提供的最大路径和+根节点值+右子树提供的最大路径和。即dfs(root.left)+root.val+dfs(r......