算法提高之LeetCode刷题数据结构和算法分析

合并区间

2020-04-16  本文已影响0人  _阿南_

题目:

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:

输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

题目的理解:

题目没有表达的意思有:数组中的集合,排序是无须的。集合存在多个集合重叠的问题。
将集合有序排序后,判断集合A的最大如果大于集合B的最小,那么将此A和B合并。

python实现

from typing import List


class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        intervals.sort(key=lambda x: x[0])

        def dealwith(inputNums: List[List[int]]) -> List[List[int]]:
            nums = list()

            for num in inputNums:
                nums += num

            result = list()
            index = 0

            while index < len(nums) - 1:
                temp = [nums[index]]
                if index + 3 > len(nums):
                    temp.append(nums[index + 1])

                    result.append(temp)
                    break

                num1 = nums[index + 1]
                num2 = nums[index + 2]

                if num1 >= num2:
                    temp.append(max(num1, nums[index + 3]))

                    index += 4
                else:
                    temp.append(num1)
                    index += 2

                result.append(temp)

            return result

        middle = dealwith(intervals)
        print(middle)

        while True:
            middleTemp = dealwith(middle)
            print(middleTemp)
            if len(middle) == len(middleTemp):
                break
            else:
                middle = middleTemp

        return middle

看着真的是好啰嗦啊,尴尬

想看最优解法移步此处

提交

ME

错误了好多次,都是因为没有考虑到细节,如果题目没有特殊说明,那么就是不支持。

// END 说话慢一点,心情平和一点

上一篇下一篇

猜你喜欢

热点阅读