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

    Given a collection of intervals, merge all overlapping 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].
    

    Example 2:

    Input: [[1,4],[4,5]]
    Output: [[1,5]]
    Explanation: Intervals [1,4] and [4,5] are considered overlapping.

    NOTE: input types have been changed on April 15, 2019. Please reset to default code definition to get new method signature.

    Solution 1:

    class Solution {
        public int[][] merge(int[][] intervals) {
            List<int[]> res = new ArrayList<>();
            if (intervals.length == 0) {
                return new int[][] {};
            }
            Arrays.sort(intervals, (a, b) -> (a[0] - b[0]));
            int start = intervals[0][0];
            int end = intervals[0][1];
            for (int[] interval: intervals) {
                if (interval[0] <= end) {
                    end = Math.max(end, interval[1]);
                } else {
                    res.add(new int[]{start, end});
                    start = interval[0];
                    end = interval[1];
                }
            }
            // need to add back the last tuple
            res.add(new int[]{start, end});
            return res.toArray(new int[][] {});
        }
    }
    class Solution {
        public int[][] merge(int[][] intervals) {
            if (intervals == null || intervals.length == 0 || intervals[0].length == 0) {
                return intervals;
            }
            List<int[]> list = new ArrayList<>();
            int[] startArr = new int[intervals.length];
            int[] endArr = new int[intervals.length];
            for (int i = 0; i < intervals.length; i++) {
                startArr[i] = intervals[i][0];
                endArr[i] = intervals[i][1];
            }
            Arrays.sort(startArr);
            Arrays.sort(endArr);
            int start = startArr[0];
            int end = endArr[0];
            for (int i = 1; i < intervals.length; i++) {
                if (startArr[i] <= end) {
                    end = endArr[i];
                } else {
                    list.add(new int[]{start, end});
                    start = startArr[i];
                    end = endArr[i];
                }
            }
            list.add(new int[]{start, end});
            int[][] res = new int[list.size()][2];
            int count = 0;
            for (int i = 0; i < list.size(); i++) {
                res[i][0] = list.get(i)[0];
                res[i][1] = list.get(i)[1];
            }
            return res;
        }
    }

    Solution 2:

    /**
     * Definition of Interval:
     * public class Interval {
     *     int start, end;
     *     Interval(int start, int end) {
     *         this.start = start;
     *         this.end = end;
     *     }
     * }
     */
    
    public class Solution {
        /**
         * @param intervals: interval list.
         * @return: A new interval list.
         */
        public List<Interval> merge(List<Interval> intervals) {
            // write your code here
            if (intervals == null || intervals.size() <= 1) {
                return intervals;
            }
            List<Interval> res = new ArrayList<>();
            // Collections work on List while Arrays work on array
            Collections.sort(intervals, new Comparator<Interval>() {
                @Override
                public int compare(Interval a, Interval b) {
                    return a.start - b.start;
                }
            });
            
            Interval pre = null;
            for (Interval cur: intervals) {
                if (pre == null || cur.start > pre.end) {
                    res.add(cur);
                    pre = cur;
                } else {
                    pre.end = Math.max(cur.end, pre.end);
                }
            }
            return res;
        }
    }
  • 相关阅读:
    MySQL-事务相关知识
    Linux脚本-自动ping网址列表
    洛谷 P2453 [SDOI2006]最短距离
    洛谷 P2915 [USACO08NOV]Mixed Up Cows G
    洛谷 P2473 [SCOI2008] 奖励关
    洛谷 P3391 【模板】文艺平衡树
    洛谷 P4146 序列终结者
    洛谷 P1486 [NOI2004] 郁闷的出纳员
    洛谷 P2596 [ZJOI2006]书架
    性能测试工具Jmeter02-安装配置
  • 原文地址:https://www.cnblogs.com/xuanlu/p/11904893.html
Copyright © 2011-2022 走看看