zoukankan      html  css  js  c++  java
  • 56.Merge Intervals

    给定一个数组的容器,将容器中的数组代表一个区间,如果有区间重叠的,将他们融合为一个大的区间,输出最终的区间。

    Example 1:
    Input: [[1,3],[2,6],[8,10],[15,18]]
    Output: [[1,6],[8,10],[15,18]]
    Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].

    思路:
    先将容器排序,按照数组区间的起点排序,则处理起来就方便了。设区间的起点为start,区间终点为end,如果下一个区间的起点 next-start比当前区间的 end 小,且 next-end > end,则更新区间为:[ start , next-end ],反之:如果下一个区间的 next-start > end,则说明不能融合,将当前区间[start, end] 加入到结果容器中。

    class Solution {
    public:
        vector<vector<int>> merge(vector<vector<int>>& intervals) {
            if (intervals.empty() || intervals[0].size() == 0) return {};
            vector<vector<int>> res;
            sort(intervals.begin(), intervals.end());
            int n = intervals.size(), start = intervals[0][0], end = intervals[0][1];
            for (int i = 0; i < n; i++) {
                if (intervals[i][0] <= end) {
                    if(intervals[i][1] > end) end = intervals[i][1];
                }
                else {
                    res.push_back({ start,end });
                    start = intervals[i][0];
                    end = intervals[i][1];
                }
            }
            res.push_back({ start,end });
            return res;
        }
    };

    Java 版:

    class Solution {
        public int[][] merge(int[][] intervals) {
            if(intervals.length == 0 || intervals[0].length == 0) return new int[][]{};
            Arrays.sort(intervals, (v1,v2)-> v1[0] - v2[0]); // 排序
            List<int[]> res = new ArrayList<>();
            int n = intervals.length, start = intervals[0][0], end = intervals[0][1];
            for(int i = 0; i < n; i++){
                if(intervals[i][0] <= end)
                    end = Math.max(end, intervals[i][1]);
                else{
                    res.add(new int[]{start, end});
                    start = intervals[i][0];
                    end = intervals[i][1];
                }
            }
            res.add(new int[]{start, end});
            return res.toArray(new int[0][]);
        }
    }
  • 相关阅读:
    最近面试被问到的问题总结(数据研发方向)
    机器学习利器——Scikit-learn的安装
    编写shell脚本遇到的问题
    DBCP配置数据库连接乱码问题
    eclipse的maven项目报Missing artifact jdk.toos:jdk.toos:jar:1.6错
    [备忘]Windows Server 2008 R2部署FTP FileZilla Server防火墙设置
    Hive-0.x.x
    使用ganglia监控hadoop及hbase集群
    开源监控软件ganglia安装手册
    [Hadoop in Action] 第7章 细则手册
  • 原文地址:https://www.cnblogs.com/luo-c/p/12988810.html
Copyright © 2011-2022 走看看