【面试经典150 | 区间】合并区间

文章目录

Tag

【排序】【一次遍历】【数组】


题目来源

56. 合并区间


题目解读

题目意思非常明确,合并有重叠的区间。


解题思路

数据量为 1 0 4 10^4 104,基本上需要时间复杂度为 O ( n ) O(n) O(n) 或者 O ( n l o g n ) O(nlogn) O(nlogn)的解题方法。

方法一:一次遍历

对数组 intervals 按照区间的起始值为关键进行升序排序。遍历该数组:

  • 如果答案数组 ret 为空直接将当前区间放入数组 ret
  • 如果当前区间与 ret 数组的最后一个区间没有交集,说明当前区间没法合并,直接加入答案数组;
  • 否则,将当前区间和数组ret最后一个区间进行合并,即取 max(ret.back()[1], intervals[1]) 作为新的 ret.back()[1]

思路清晰,最后返回ret

实现代码

cpp 复制代码
class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), [&](vector<int>& a, vector<int>& b) {
            return a[0] < b[0];
        });

        vector<vector<int>> ret;
        int n = intervals.size();
        if (n == 1) {
            return intervals;
        }
        for (int i = 0; i < n; ++i) {
            int L = intervals[i][0], R = intervals[i][1];
            if (!ret.size() || ret.back()[1] < L) {
                ret.push_back({L, R});
            }
            else {
                ret.back()[1] = max(ret.back()[1], R);
            }
        }
        return ret;
    }
};

复杂度分析

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn),一次遍历时间复杂度为 O ( n ) O(n) O(n),快速排序的时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn),因此总的时间复杂度为 O ( n l o g n ) O(nlogn) O(nlogn)。

空间复杂度: O ( l o g n ) O(logn) O(logn),这是排序需要的空间。空间复杂度计算不包括储存答案的数组。

其他语言

python3

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

        res = []
        for interval in intervals:
            if not res or res[-1][1] < interval[0]:
                res.append(interval)
            else:
                res[-1][1] = max(res[-1][1], interval[1])
        return res

写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

相关推荐
Tisfy1 天前
LeetCode 2402.会议室 III:优先队列大模拟
算法·leetcode·题解·优先队列·排序·大模拟
2401_841495641 天前
【LeetCode刷题】零钱兑换
数据结构·python·算法·leetcode·动态规划·数组·时间复杂度
2401_841495642 天前
【LeetCode刷题】打家劫舍
数据结构·python·算法·leetcode·动态规划·数组·传统dp数组
Irene19912 天前
JavaScript 字符串和数组方法总结(默写版:同9则6 Str21 Arr27)
javascript·字符串·数组·方法总结
l1t3 天前
在postgres和duckdb中比较两个数组并只挑选不匹配的元素
数据库·sql·postgresql·数组·duckdb
B_lack0264 天前
字节转换算法应用_读取本地时间
数据结构·算法·数组·西门子plc·博途·时间处理·scl
2401_841495644 天前
【LeetCode刷题】跳跃游戏Ⅱ
数据结构·python·算法·leetcode·数组·贪心策略·跳跃游戏
weixin79893765432...5 天前
js 数据结构
链表·数组·哈希表·堆|栈·树|图·队列|双端队列·js 数据结构
一雨方知深秋8 天前
数组定义及访问
java·数组·二维数组·for·length·定义访问
Irene19919 天前
JavaScript 原生 sort() 方法详解
排序·sort