zoukankan      html  css  js  c++  java
  • [Swift]LeetCode57. 插入区间 | Insert Interval

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/9917924.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    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:

    Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
    Output: [[1,5],[6,9]]
    

    Example 2:

    Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
    Output: [[1,2],[3,10],[12,16]]
    Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].

    给出一个无重叠的 ,按照区间起始端点排序的区间列表。

    在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

    示例 1:

    输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
    输出: [[1,5],[6,9]]
    

    示例 2:

    输入: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
    输出: [[1,2],[3,10],[12,16]]
    解释: 这是因为新的区间 [4,8][3,5],[6,7],[8,10] 重叠。

    40ms
     1 /**
     2  * Definition for an interval.
     3  * public class Interval {
     4  *   public var start: Int
     5  *   public var end: Int
     6  *   public init(_ start: Int, _ end: Int) {
     7  *     self.start = start
     8  *     self.end = end
     9  *   }
    10  * }
    11  */
    12 class Solution {
    13     
    14     func merge(_ intervals: [Interval]) -> [Interval] {
    15          
    16         let intervalsSorted =  intervals.sorted(by: { $0.start < $1.start } )
    17       
    18         var theIntervals = [Interval]()
    19         
    20          
    21         for interval in intervalsSorted  { 
    22             
    23             if (theIntervals.count == 0 || theIntervals.last!.end <  interval.start) { 
    24                 theIntervals.append(interval) 
    25             }
    26             // merge
    27             else {
    28                 
    29                  theIntervals.last!.end = max(theIntervals.last!.end, interval.end)  
    30             }
    31              
    32         }
    33         
    34         return theIntervals
    35     }
    36     
    37     func insert(_ intervals: [Interval], _ newInterval: Interval) -> [Interval] {
    38         if (intervals.count == 0) {
    39             var theIntervals = intervals
    40             theIntervals.append(newInterval)
    41             return theIntervals
    42         }
    43         
    44         if (newInterval.end < intervals.first!.start) {
    45             var theIntervals = intervals
    46             theIntervals.insert(newInterval, at: 0)
    47             return theIntervals
    48         }
    49         
    50         if (newInterval.start > intervals.last!.end) {
    51             var theIntervals = intervals
    52             theIntervals.append(newInterval)
    53             return theIntervals
    54         }
    55         
    56         var theIntervals = [Interval]()
    57         var begin = 0
    58         var end = 0
    59         var insert = 0
    60         var i = 0
    61         while ( i < intervals.count  && intervals[i].end < newInterval.start) { 
    62             theIntervals.append(intervals[i])
    63             i += 1
    64         }
    65         
    66         var theInterval = Interval(newInterval.start, newInterval.end)
    67         while (i < intervals.count  && intervals[i].start <= newInterval.end) {
    68             theInterval.start = min(theInterval.start, intervals[i].start)
    69             theInterval.end = max(theInterval.end, intervals[i].end)
    70             i += 1
    71         }
    72         theIntervals.append(theInterval)
    73         
    74         while ( i < intervals.count  && intervals[i].start > newInterval.end) { 
    75             theIntervals.append(intervals[i])
    76             i += 1
    77         }
    78         
    79         return theIntervals
    80     }
    81 }

    44ms

     1 /**
     2  * Definition for an interval.
     3  * public class Interval {
     4  *   public var start: Int
     5  *   public var end: Int
     6  *   public init(_ start: Int, _ end: Int) {
     7  *     self.start = start
     8  *     self.end = end
     9  *   }
    10  * }
    11  */
    12 class Solution {
    13     func insert(_ intervals: [Interval], _ newInterval: Interval) -> [Interval] {
    14 
    15         var right = newInterval.end
    16         var left = newInterval.start
    17         var ans = intervals
    18         for i in stride(from:ans.count - 1,through:0,by:-1) {
    19             if ans[i].start > newInterval.end || ans[i].end < newInterval.start {
    20                 continue
    21             } else {
    22                 right = max(right,ans[i].end)
    23                 left = min(left,ans[i].start)
    24                 ans.remove(at:i)
    25             }
    26         }
    27         for (index,inter) in ans.enumerated() {
    28             if inter.start > right {
    29                 ans.insert(Interval(left,right),at:index)
    30                 break
    31             } else if index == ans.count - 1 {
    32                 ans.append(Interval(left,right))
    33             }
    34         }
    35         
    36         if ans.count == 0 {
    37             return [Interval(left,right)]
    38         }
    39         
    40         return ans
    41     }
    42 }

    48ms

     1 /**
     2  * Definition for an interval.
     3  * public class Interval {
     4  *   public var start: Int
     5  *   public var end: Int
     6  *   public init(_ start: Int, _ end: Int) {
     7  *     self.start = start
     8  *     self.end = end
     9  *   }
    10  * }
    11  */
    12 class Solution {
    13     func insert(_ intervals: [Interval], _ newInterval: Interval) -> [Interval] {
    14         var result = [Interval]()
    15         
    16         guard intervals.count>0 else { 
    17             result.append(newInterval)
    18             return result
    19         }
    20         
    21         result.append(newInterval)
    22         
    23         for i in 0..<intervals.count {
    24             var interval1 = result.removeLast()
    25             var interval2 = intervals[i]
    26             var cond1 = interval2.end >= interval1.start && interval2.start <= interval1.end
    27             if(cond1) {
    28                 var start = min(interval1.start,interval2.start)
    29                 var end = max(interval1.end,interval2.end)
    30                 var newInterval = Interval(start,end)
    31                 
    32                 result.append(newInterval)
    33             }
    34             else {
    35                 if(interval1.start<interval2.start) {
    36                     result.append(interval1)
    37                     result.append(interval2)
    38                 }
    39                 else {
    40                     result.append(interval2)
    41                     result.append(interval1)
    42                 }
    43             }
    44         }
    45         
    46         return result
    47     }
    48 }

    56ms

     1 class Solution {
     2     func insert(_ intervals: [Interval], _ newInterval: Interval) -> [Interval] {
     3         var ans = [Interval]()
     4         var i = 0
     5         var insertInterval = Interval(newInterval.start,newInterval.end)
     6         while i < intervals.count {
     7             if intervals[i].end >= newInterval.start { break }
     8             ans.append(intervals[i])
     9             i += 1
    10         }
    11         while i < intervals.count {
    12             if intervals[i].start <= newInterval.start && intervals[i].end >= newInterval.start {
    13                 insertInterval.start = min(insertInterval.start,intervals[i].start)
    14             }
    15             if intervals[i].end >= newInterval.end && intervals[i].start <= newInterval.end {
    16                 insertInterval.end = max(insertInterval.end,intervals[i].end)
    17                 i += 1
    18                 break
    19             }
    20             if intervals[i].start > newInterval.end {
    21                 break
    22             }
    23             i += 1
    24         }
    25         
    26         ans.append(insertInterval)
    27         while i < intervals.count {
    28             ans.append(intervals[i])
    29             i += 1
    30         }
    31         
    32         return ans
    33     }
    34 }

    68ms

     1 /**
     2  * Definition for an interval.
     3  * public class Interval {
     4  *   public var start: Int
     5  *   public var end: Int
     6  *   public init(_ start: Int, _ end: Int) {
     7  *     self.start = start
     8  *     self.end = end
     9  *   }
    10  * }
    11  */
    12 class Solution {
    13     func insert(_ intervals: [Interval], _ newInterval: Interval) -> [Interval] {
    14         guard intervals.count > 0 else {
    15             return [newInterval]
    16         }
    17         var newIntervals = [Interval](intervals)
    18         newIntervals.append(newInterval)
    19         newIntervals.sort{$0.start<$1.start}
    20         var previousOne = newIntervals[0]
    21         var result = [Interval]()
    22         
    23         for i in 1..<newIntervals.count {
    24             let currentOne = newIntervals[i]
    25             if previousOne.end >= currentOne.start {
    26                 previousOne = Interval(previousOne.start, max(previousOne.end, currentOne.end))
    27             } else {
    28                 result.append(previousOne)
    29                 previousOne = currentOne
    30             }
    31         }
    32         
    33         result.append(previousOne)
    34         return result
    35     }
    36 }

    72ms

     1 /**
     2  * Definition for an interval.
     3  * public class Interval {
     4  *   public var start: Int
     5  *   public var end: Int
     6  *   public init(_ start: Int, _ end: Int) {
     7  *     self.start = start
     8  *     self.end = end
     9  *   }
    10  * }
    11  */
    12 class Solution {
    13     
    14     func merge(_ intervals: [Interval]) -> [Interval] {
    15          
    16         let intervalsSorted =  intervals.sorted(by: { $0.start < $1.start } )
    17       
    18         var theIntervals = [Interval]()
    19         
    20          
    21         for interval in intervalsSorted  { 
    22             // no merge
    23             
    24             if (theIntervals.count == 0 || theIntervals.last!.end <  interval.start) { 
    25                 theIntervals.append(interval) 
    26             }
    27             // merge
    28             else {
    29                 
    30                  theIntervals.last!.end = max(theIntervals.last!.end, interval.end)  
    31             }
    32              
    33         }
    34         
    35         return theIntervals
    36     }
    37     
    38     func insert(_ intervals: [Interval], _ newInterval: Interval) -> [Interval] {
    39         
    40         var intervalsPlusOne = intervals 
    41         intervalsPlusOne.append(newInterval)
    42         
    43         let merged = merge(intervalsPlusOne)
    44         
    45         return merged 
    46         
    47     }
    48 }

    76ms

     1 /**
     2  * Definition for an interval.
     3  * public class Interval {
     4  *   public var start: Int
     5  *   public var end: Int
     6  *   public init(_ start: Int, _ end: Int) {
     7  *     self.start = start
     8  *     self.end = end
     9  *   }
    10  * }
    11  */
    12 class Solution {
    13     func insert(_ intervals: [Interval], _ newInterval: Interval) -> [Interval] {
    14         guard intervals.count > 0 else {
    15             return [newInterval]
    16         }
    17         var i = 0
    18         var output: [Interval] = []
    19         var newInterval = newInterval
    20         var appendNew = true
    21         while i < intervals.count {
    22             if (intervals[i].end < newInterval.start) || (intervals[i].start > newInterval.end) {
    23                 output.append(intervals[i])
    24                 i += 1
    25                 continue
    26             }
    27             var j = i
    28             while j < intervals.count, !((intervals[j].end < newInterval.start) || (intervals[j].start > newInterval.end)) {
    29                 appendNew = false
    30                 i = j
    31                 newInterval = Interval(min(intervals[j].start, newInterval.start), max(intervals[j].end, newInterval.end))
    32                 j += 1
    33             }
    34             i += 1
    35             output.append(newInterval)
    36         }
    37         if appendNew {
    38             output.append(newInterval)
    39             output.sort(by: { $0.start < $1.start })
    40         }
    41         return output
    42     }
    43 }

    108ms

     1 /**
     2  * Definition for an interval.
     3  * public class Interval {
     4  *   public var start: Int
     5  *   public var end: Int
     6  *   public init(_ start: Int, _ end: Int) {
     7  *     self.start = start
     8  *     self.end = end
     9  *   }
    10  * }
    11  */
    12 
    13 class Solution {
    14     func insert(_ intervals: [Interval], _ newInterval: Interval) -> [Interval] {
    15 
    16         if intervals.count == 0 {
    17             return [newInterval]
    18         }
    19         
    20         var sorted = intervals
    21         sorted.append(newInterval)
    22         sorted.sort { (a, b) -> Bool in
    23                      a.start < b.start
    24                     }
    25         guard var firstInterval = sorted.first else {
    26             return [newInterval]
    27         }
    28         var result = [firstInterval]
    29         var inserted = false
    30         for i in 1..<sorted.count {
    31             if var previous = result.last {
    32                 let current = sorted[i]
    33                 if self.inRange(previous, current) {
    34                     result[result.count - 1] = self.merge(previous, current)
    35                 } else {
    36                     result.append(current)
    37                 }
    38             }
    39         }
    40         
    41         return result
    42     }
    43     
    44     func inRange(_ a: Interval, _ b: Interval) -> Bool {
    45         return a.end >= b.start && a.start <= b.start
    46     }
    47     
    48     func merge(_ first: Interval, _ last: Interval) -> Interval {
    49         let start = min(first.start, last.start)
    50         let end = max(first.end, last.end)
    51         return Interval(start, end)
    52     }
    53 }
  • 相关阅读:
    20 模块之 re subprocess
    19 模块之shelve xml haslib configparser
    18 包 ,logging模块使用
    vue项目的搭建使用
    课程模块表结构
    DRF分页组件
    Django ContentType组件
    跨域
    解析器和渲染器
    DRF 权限 频率
  • 原文地址:https://www.cnblogs.com/strengthen/p/9917924.html
Copyright © 2011-2022 走看看