`
frank-liu
  • 浏览: 1665999 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

leetcode: Merge Intervals

 
阅读更多

问题描述:

Given a collection of intervals, merge all overlapping intervals.

For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].

原问题链接:https://leetcode.com/problems/merge-intervals/

 

问题分析

  这里需要将一组interval给合并起来。其实如果有一组interval它们的起始点start是递增的,我们可以通过取第一个开始,每次和后面的比较,如果后面那个interval和前面的没有交叉,则将前面的这个interval加入到结果集中,否则进行合并。而合并的流程比较简单,取两个interval中间end值大的那个。因为这里是按照start的顺序从小到大排列的,所以甚至可以不需要比较。

  这样,在具体的实现里我们首先将给定的List按照start从小到大的排序,然后再按照前面描述的合并以及加入到结果集中。具体的实现如下:

 

/**
 * Definition for an interval.
 * public class Interval {
 *     int start;
 *     int end;
 *     Interval() { start = 0; end = 0; }
 *     Interval(int s, int e) { start = s; end = e; }
 * }
 */
public class Solution {
    public List<Interval> merge(List<Interval> intervals) {
        if(intervals.size() <= 1)
            return intervals;
        Collections.sort(intervals, new Comparator<Interval>() {
            public int compare(Interval t1, Interval t2) {
                return t1.start - t2.start;
            }
        });
        List<Interval> result = new ArrayList<Interval>();
        int curStart = intervals.get(0).start;
        int curEnd = intervals.get(0).end;
        for(int i = 1; i < intervals.size(); i++) {
            if(curEnd >= intervals.get(i).start) {
                curEnd = Math.max(curEnd, intervals.get(i).end);
                curStart = Math.min(curStart, intervals.get(i).start);
            } else {
                result.add(new Interval(curStart, curEnd));
                curStart = intervals.get(i).start;
                curEnd = intervals.get(i).end;
            }
        }
        result.add(new Interval(curStart, curEnd));
        return result;
    }
}

  因为目前的实现已经支持java 8了,如果我们再运用一点lambda表达式语法的技巧, 代码可以更加简略一点:

 

public class Solution {
    public List<Interval> merge(List<Interval> intervals) {
        if(intervals.size() <= 1)
            return intervals;
        Collections.sort(intervals, (t1, t2) -> t1.start - t2.start);
        List<Interval> result = new ArrayList<Interval>();
        int curStart = intervals.get(0).start;
        int curEnd = intervals.get(0).end;
        for(int i = 1; i < intervals.size(); i++) {
            if(curEnd >= intervals.get(i).start) {
                curEnd = Math.max(curEnd, intervals.get(i).end);
                curStart = Math.min(curStart, intervals.get(i).start);
            } else {
                result.add(new Interval(curStart, curEnd));
                curStart = intervals.get(i).start;
                curEnd = intervals.get(i).end;
            }
        }
        result.add(new Interval(curStart, curEnd));
        return result;
    }
}

 

分享到:
评论

相关推荐

    javalruleetcode-LeetCode::lollipop:个人LeetCode习题解答仓库-多语言

    java lru leetcode :ice_cream: LeetCode Kindem 的个人 LeetCode 题解仓库,欢迎交流学习。 下面的目录中 $number 题号代表经典 LeetCode 题目,$number.$number ...LeetCode ...Merge Intervals 64 Minimum Path Sum 73

    leetcode2sumc-LeetCode:练习商务面试

    leetcode 2 sum c LeetCode规划 LEETCODE PATTERNS 从LeetCode学演算法 Leetcode笔记 Leetcode 经典题目 程式题 1) reverse string Input: ["h","e","l","l","o"] Output: ["o","l","l","e","h"] 使用内部swap class...

    leetcode分类-leetCode:leetcode

    leetcode 分类 ReadMe 纯粹记录一下自己leetCode做题记录及部分思路笔记,不充当指导性...intervals 区间合并类型 cyclic sort 循环排序 list 链表 ... 这些tag分类都可以在一些平台上找到,VSCode中也有响应的分类tag

    gasstationleetcode-LeetCode:力码

    leetcode 力码 【吾生也有涯,而知也无涯。】 刷题解题记录: 大批: 220 包含重复 III 考 55 跳跃游戏45 跳跃游戏 II121 买卖股票的最佳时机 122 买卖股票的最佳时机 II123 买卖股票的最佳时机 III188 买卖股票的...

    LeetCodeTrain:这是来自LeetCode的已解决任务的存储库

    这是来自LeetCode的已解决任务的存储库使用Java语言解决任务 CoinChange.java - //leetcode....intervals/ ReverseLinkedList.java - //leetcode.com/problem

    leetcode56-Leetcode56---Merge-Intervals:Leetcode56---合并间隔

    leetcode56 Leetcode56 合并间隔

    LeetCode最全代码

    # [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...

    lrucacheleetcode-LeetCodeSheet:记录自己Leetcode之旅

    Intervals 进阶题目: Leetcode 179. Largest Number Leetcode 75. Sort Colors Leetcode 215. Kth Largest Element Leetcode 4. Median of Two Sorted Arrays 注意:后两题是与快速排序非常相似的快速选择(Quick ...

    LeetCode刷题笔记——56. 合并区间

    def merge(self, intervals: List[List[int]]) -&gt; List[List[int]]: intervals = sorted(intervals) # 区间从小到大排序,若左边界相等,则对右边界排序; i = 1 # 初始位置从第二个区间开始 while i = ...

    leetcode中文版-LeetCode-OJ:我对leetcodeoj的回答

    leetcode中文版##LeetCode 在线裁判练习 更新频率:一天一题。 所有答案都是我自己完成的,换句话说,答案可能不是最好的,但可以接受。 从这些科目中,我发现动态规划非常重要。 ##难的 ###合并间隔 Given a ...

    leetcode2sumc-Fizz:嘶嘶声

    Intervals:还没有检查连接组件方法 065 068 069 071 131 回文分区:动态规划 180 188个买卖股票的最佳时机IV:不懂最快的方法 218 341 展平嵌套列表迭代器 371 两个整数的和 438 查找字符串中的所有字谜:哈希值 ...

    猜单词leetcode-leetcodelearn:leetcodelearn

    猜单词leetcode leetcodelearn 2020-06-03 标题 2020-06-04 标题 2020-06-05 标题 2020-06-06 标题 2020-06-07 标题 标题 知识点 二分法 ...翻转单词顺序com/problems/merge-intervals/) 2020-06-20 标题

    leetcode482-coding-test:编码测试

    MergeIntervals_56 [Java] Java LinkedList 用法和示例总结 MeetingRoomsII_253 [Java] PriorityQueue 类用法和示例总结 关于 KClosetPointsToOrigin_973 PriorityQueue(报告正确答案) FindAllAnagramsInAString_...

    Coding Interview In Java

    11 Merge Intervals 43 12 Insert Interval 45 13 Two Sum 47 14 Two Sum II Input array is sorted 49 15 Two Sum III Data structure design 51 16 3Sum 53 17 4Sum 55 18 3Sum Closest 57 19 String to Integer ...

    Leetcode典型题解答和分析、归纳和汇总——T56(合并区间)

    vector&lt;vector&gt; merge(vector&lt;vector&gt;& intervals){ vector&lt;vector&gt; res; //作为返回结果 if(intervals.empty()) return res; sort(intervals.begin(),intervals.end()); //按照区间的左边界来进行排序 int ...

    cpp-算法精粹

    Merge Intervals Minimum Window Substring Multiply Strings Substring with Concatenation of All Words Pascal's Triangle Pascal's Triangle II Spiral Matrix Spiral Matrix II ZigZag Conversion Divide Two ...

Global site tag (gtag.js) - Google Analytics