前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【LeetCode】Merge Intervals

【LeetCode】Merge Intervals

作者头像
felix
发布于 2018-06-12 08:06:30
发布于 2018-06-12 08:06:30
59800
代码可运行
举报
文章被收录于专栏:Felix的技术分享Felix的技术分享
运行总次数:0
代码可运行

【LeetCode】Merge Intervals

题目

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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].

分析

先对intervals集合按start从小到大排序,last变量用于保存可能插入到结果集中的元素,遍历每一个集合中的元素,如果符合合并的条件,将last和当前元素合并,并重新赋值给last,此时last仍然具有合并的潜力;如果不符合合并的条件,则将last放入结果集中,并把当前元素赋值给last,成为一个新的潜在具有合并性的元素。

自定义比较类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     //      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 static final Comparator<Interval> BY_START = new ByStart();

    private static class ByStart implements Comparator<Interval> {
        @Override
        public int compare(Interval o1, Interval o2) {
            return o1.start - o2.start;
        }
    }

主方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        public List<Interval> merge(List<Interval> intervals) {
        ArrayList<Interval> result = new ArrayList<Interval>();

        if (intervals == null || intervals.size() == 0) {
            return result;
        }

        //按Interval的start对intervals排序
        Collections.sort(intervals, BY_START);

        Interval last = intervals.get(0);
        for (int i = 1; i < intervals.size(); i++) {
            Interval temp = intervals.get(i);
            if (canMerge(last, temp)) {
                if (last.end <= temp.end) {
                    last = new Interval(last.start, temp.end);
                }
                //另外一种情况last保持不变
            } else {
                result.add(last);
                last = intervals.get(i);
            }

        }
        result.add(last);
        return result;
    }

    private boolean canMerge(Interval item1, Interval item2) {
        if (item1.end >= item2.start) {
            return true;
        }
        return false;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年05月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 0056 - Merge Intervals
Given a collection of intervals, merge all overlapping intervals.
Reck Zhang
2021/08/11
1880
Array - 56. Merge Intervals
Given a collection of intervals, merge all overlapping intervals.
ppxai
2020/09/23
3190
​关关的刷题日记99 – Leetcode 56. Merge Intervals
关关的刷题日记99 – Leetcode 56. 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]. 题目的意思是给出一个区间集合,让我们合并所有重叠区间。 思路 首先我们要对集合进行从小到大排序,因为区间是自己定义的数据结构,所以我们要
WZEARW
2018/04/13
5870
​LeetCode刷题实战56:合并区间
https://leetcode-cn.com/problems/merge-intervals/
程序员小猿
2021/01/20
2630
​LeetCode刷题实战56:合并区间
Leetcode 56 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]. 重叠区间合并, 排序后检查当前区间右边和下一个区间左边是否交叉,交叉则合并 /** * Definition for an interval. * struct Interval { * int sta
triplebee
2018/01/12
5580
LeetCode-56and57-Merge-Intervals
如例子中所示,每个数组的前后分别表示开始和结束,工作是合并有重叠的数组。例如,由于[1,3]和[2,6]有重叠,故直接改为[1,6]后输出。 想法还是比较简单的,因为输入的并不一定是给好的按照开始,所以需要先对输入以开始的值排序。首先在结果数组中写入第一个,只有遍历进行判断,分为两种情况:
小二三不乌
2018/08/07
3290
56. 合并区间
解:题目不难,注意会出现[[1,8],[4,5]…]这种情况,比较特殊用Math.max比较一下
张伦聪zhangluncong
2022/10/26
1710
LeetCode133|合并区间
先对数组进行排序,然后进行逻辑判断,这里使用了集合作为一个临时存储空间,比较相邻区间的内容,如前一个区间右端点的值和下一个区间左端点的值做比较,符合合并的时候进行合并之后放入结果集,不符合合并的也放入结果集中,当所有的区间都处理完成之后,符合合并的数据就处理完成了,这也是本题的主要思路
码农王同学
2020/11/16
3280
【Leetcode】56. 合并区间
这个题的基本思路就是当两个区间有重合的时候,第一个区间的end >= 第二个区间的start。前提是我们都是从小到大排好序的。那么合并完的区间就是[第一个区间的start, 第二个区间的end]。遍历结束,即可得到最终的解。
Leetcode名企之路
2018/09/12
6780
每天一道leetcode56-合并区间
题目 每天一道leetcode56-合并区间 分类:数组 中文链接: https://leetcode-cn.com/problems/merge-intervals/description/ 英文链接 https://leetcode.com/problems/merge-intervals/description/ 题目详述 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]]
乔戈里
2019/09/17
3090
leetcode: 56. Merge Intervals
Problem # 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]. AC class Interval(): def __init__(self, s=0, e=0): self.start = s self.end
JNingWei
2018/09/27
4640
leetcode归并排序_什么是区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
全栈程序员站长
2022/09/22
2120
LeetCode56. 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
Yuyy
2022/06/28
1870
56、合并区间 (Merge Intervals)
给出一个区间的集合,请合并所有重叠的区间。 示例 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] 可被视为重叠区间。 解题思路: * 根据对象的start 升序排序 * 遍历对象列表 * 如果当前结果列表最后一个元素end比下一个元素的
yukong
2019/01/28
5210
LeetCode - #56 合并区间(Top 100)
我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。
Swift社区
2022/07/05
2920
关于leetcode第56题合并重复区间的解析
https://leetcode-cn.com/problems/merge-intervals/
冬天里的懒猫
2020/08/03
7870
LeetCode-56-合并区间
虽然示例中没有给出需要排序的案例,但需要考虑数组不是按照首位数组顺序排列的情况,这样会让区间难以判断,所以先做一个排序。
benym
2022/07/14
1620
算法练习(2) - 合并重叠数组
package top.buukle.buukle.排序类; import java.util.Arrays; public class 合并数组 { //以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返 //回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。 // // // // 示例 1: // // //输入:intervals = [[1,3],[2,6],[8,10],[
惊羽-布壳儿
2022/06/15
4630
LeetCode134|插入区间
给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。
码农王同学
2020/11/16
3010
leetcode刷题(76)—— 56. 合并区间
输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2:
老马的编程之旅
2022/06/22
1800
leetcode刷题(76)—— 56. 合并区间
相关推荐
LeetCode 0056 - Merge Intervals
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验