美文网首页
排序面试题

排序面试题

作者: 前年的邂逅_Jerry | 来源:发表于2019-10-28 23:23 被阅读0次

已知有很多会议,如果这些会议的时间有重叠,则将他们合并.
例如,有一个会议的时间为下午3点到下午5点,另外一个会议的时间为下午4点到6点,那么合并之后的会议时间为下午3点到6点。

    func mergeSort(_ arr : [MeetingTime]) -> [MeetingTime]{
        var arr = arr
        guard arr.count > 0 else{
            return []
        }
        arr.sort { (time1, time2) -> Bool in
            if time1.start != time2.start{
                return time1.start < time2.start
            }else{
                return time1.end < time2.end
            }
        }
        
        for item in arr{
            print("\(item.start):\(item.end)")
        }
        
        //定义一个数组 用来装合并后的值
        var res = [MeetingTime]()
        res.append(arr[0])
        for i in 1...arr.count - 1{
            let current = arr[i]
            let last = res.last!
            if current.start > last.end{
                res.append(current)
            }else{
                last.end = max(last.end,current.end)
            }
        }
        return res
    }
    class MeetingTime{
        var start : Int
        var end : Int
        public init(_ start : Int,_ end : Int){
            self.start = start
            self.end = end
        }
    }

        var arr = [MeetingTime]()
        
        let time1 = MeetingTime(0, 1)
        let time2 = MeetingTime(1, 2)
        let time3 = MeetingTime(9, 10)
        let time4 = MeetingTime(4, 6)
        let time5 = MeetingTime(5, 8)
        let time6 = MeetingTime(1, 2)
        let time7 = MeetingTime(18, 20)
        let time8 = MeetingTime(22, 21)
        arr.append(time1)
        arr.append(time2)
        arr.append(time3)
        arr.append(time4)
        arr.append(time5)
        arr.append(time6)
        arr.append(time7)
        arr.append(time8)
        let res = mergeSort(arr)
        print("-------归并结果--------")
        for item in res{
            print("\(item.start):\(item.end)")
        }
打印结果:
0:1
1:2
1:2
4:6
5:8
9:10
18:20
22:21
-------归并结果--------
0:2
4:8
9:10
18:20
22:21

相关文章

  • 各种排序算法

    排序算法包括很多,常见的有快排,堆排序,冒泡排序,归并排序,选择排序,插入排序等, 各种排序算法经常出现在面试题中...

  • 几种实用的简易的排序算法

    也是面试题 一、插入排序 1.插入排序—直接插入排序(Straight Insertion Sort) 思路 遍历...

  • 前端面试题每日更新:js冒泡排序及其优化方法

    冒泡排序: 冒泡排序优化版: 更多前端面试题,请到github查看或参与讨论https://github.com/...

  • 算法

    十大经典排序算法(动图演示) 【数据结构】链表的原理及与其相关的常见面试题总结 一、排序算法 交换排序冒泡排序快速...

  • LeetCode 每日一题 [5] 合并排序的数组

    LeetCode 面试题 10.01. 合并排序的数组 [简单] 给定两个排序后的数组 A 和 B,其中 A 的末...

  • Leetcode-面试题 03.05 栈排序

    面试题 03.05. 栈排序[https://leetcode-cn.com/problems/sort-of-s...

  • 快速排序和归并排序

    1、快速排序 快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一...

  • 快速排序

    快速排序是冒泡排序的改进版,也是最好的一种内排序,在很多面试题中都会出现,也是作为程序员必须掌握的一种排序方法。 ...

  • 力扣题解(数组)

    26. 删除排序数组中的重复项 面试题 16.21. 交换和 面试题 17.10. 主要元素 摩尔投票法 15. ...

  • 面试题 03.05. 栈排序

    面试题 03.05. 栈排序 栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放...

网友评论

      本文标题:排序面试题

      本文链接:https://www.haomeiwen.com/subject/gniivctx.html