Merge Intervals 合并区间@LeetCode

分组背包问题(MCKP)三大算法对比:贪心、Dyer-Zemel和动态规划谁更强? 本文深入对比了分组背包问题(MCKP)的三大主流算法:贪心算法、Dyer-Zemel算法和动态规划。通过分析各自的原理、实现及性能表现,揭示了贪心算法速度快但非最优,动态规划精确但受限于规模,而Dyer-Zemel算法则在效率与最优性间取得了最佳平衡,是解决中等至大规模MCKP问题的首选方案。 阅读详情

采用的是和Insert Interval一样的思想,只不过最开头要先排序一下,用到了java的Collections.sort(List<Interval> list, Comparator<? super Interval> c)

自己实现了一个Comparator的compare方法


http://blog.youkuaiyun.com/fightforyourdream/article/details/16876485


package Level4;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

import Utility.Interval;

/**
 * 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].

Discuss


 *
 */
public class S56 {

	public static void main(String[] args) {
		ArrayList<Interval> intervals = new ArrayList<Interval>();
		intervals.add(new Interval(2,3));
		intervals.add(new Interval(3,4));
		intervals.add(new Interval(6,7));
		intervals.add(new Interval(1,10));
		
		
		System.out.println(merge(intervals));
	}

	public static ArrayList<Interval> merge(ArrayList<Interval> intervals) {
		ArrayList<Interval> ret = new ArrayList<Interval>();
		if(intervals.size() == 0){
			return ret;
		}
		
		// 要先按照start的顺序排序一下,这样就能保证全部能merge了!
		Collections.sort(intervals, new Comparator<Interval>() {
			@Override
			public int compare(Interval o1, Interval o2) {
				return o1.start - o2.start;		// 升序排
			}
		});
		
		Interval ref = intervals.get(0);
		for(int i=1; i<intervals.size(); i++){
			Interval cur = intervals.get(i);
			if(cur.end < ref.start){
				ret.add(cur);
			}else if(ref.end < cur.start){
				ret.add(ref);
				ref = cur;
			}else{
				ref = new Interval(Math.min(ref.start, cur.start), Math.max(ref.end, cur.end));
			}
		}
		ret.add(ref);
		return ret;
	}
	
	

}



Second try:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/*
 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].
 */
public class MergeIntervals {

	public static void main(String[] args) {

	}

	public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
		if(intervals==null || intervals.size()==0){
			return intervals;
		}
		Collections.sort(intervals, new Comparator<Interval>() {
			@Override
			public int compare(Interval o1, Interval o2) {
				return o1.start-o2.start;		// 按照start的升序排列
			}
		});
		
		Interval merged = intervals.get(0);
		ArrayList<Interval> ret = new ArrayList<Interval>();
		for(int i=1; i<intervals.size(); i++){
			Interval cur = intervals.get(i);
			if(cur.end < merged.start){
				ret.add(cur);
			}else if(merged.end < cur.start){
				ret.add(merged);
				merged = cur;
			}else{
				int min = Math.min(cur.start, merged.start);
				int max = Math.max(cur.end, merged.end);
				merged = new Interval(min, max);
			}
		}
		
		ret.add(merged);
		return ret;
	}
	
	public static class Interval{
		int start;
		int end;
		public Interval(){
			start = 0;
			end = 0;
		}
		public Interval(int s, int e){
			start = s;
			end = e;
		}
	}
}


/**
 * 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) {
        List<Interval> ret = new ArrayList<Interval>();
        if(intervals.size() == 0) {
            return ret;
        }
        
        Collections.sort(intervals, new Comparator<Interval>(){
            public int compare(Interval i1,Interval i2) {
                return i1.start - i2.start;
            }
        } );
        
        Interval merged = new Interval(intervals.get(0).start, intervals.get(0).end);
        for(int i=1; i<intervals.size(); i++) {
            Interval cur = intervals.get(i);
            if(cur.start <= merged.end) {
                merged = new Interval(Math.min(merged.start, cur.start), Math.max(merged.end, cur.end));
            } else {
                ret.add(merged);
                merged = cur;
            }
        }
        ret.add(merged);
        
        return ret;
    }
}





把 ABAP Unit 测试放进本地类:让重构更安全、让测试更好找的组织方式 ABAP测试代码组织策略:单元测试与集成测试的合理存放位置 本文针对ABAP开发中测试代码组织混乱的问题,提出了一套系统化的解决方案: 单元测试应存放在被测类的本地测试include中(...CCAU或...T99),确保测试与代码同步演进且易于发现 跨对象测试(组件/集成/系统测试)应创建单独的全局测试类,并通过FOR TESTING和ABSTRACT进行防护 使用! @testing注释建立测试关系,使测试与被测对象明确关联,提高可发现性 针对不同技术栈(RAP/CAP/OData)提供了具体落地建议, 阅读详情

相关推荐

深入解析AutoConfigURL劫持:从注册表权限到一键修复

本文深入解析了AutoConfigURL劫持的原理,揭示其通过篡改注册表权限锁定浏览器设置的机制。文章提供了从手动修复注册表权限到使用一键修复工具的详细解决方案,并指导用户进行DNS检查与病毒查杀,以彻底根除此类顽固劫持问题。

weixin_29229989的博客 767

区间合并问题(merge-intervals)

这是leetcode上的一道题目, 原题目表述如下: 给定一组区间,合并所有有重叠的区间. 例子1: Input: [[1,3],[2,6],[8,10],[15,18]] Output: [[1,6],[8,10],[15,18]] 解释: 由于[1,3] 和 [2,6] 有重叠区域, 合并为 [1,6]. 例子2: Input: [[1,4],[4,5]] Output: [[1,5]] 解释...

开心就好的专栏 8932

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。

weixin_27697385的博客 295

LeetCode刷题(python版)——Topic56合并区间

请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

weixin_54039182的博客 740

从SolidWorks到URDF:插件使用、关节配置与PyBullet仿真避坑指南

本文提供了一份从SolidWorks导出URDF模型并导入PyBullet进行仿真的完整实战指南。详细讲解了SolidWorks插件的正确安装与配置、关节类型的选择与坐标系对齐的核心技巧,并针对PyBullet仿真中常见的模型散架、路径错误、物理属性异常等问题提供了深度避坑解决方案,帮助机器人开发者高效完成从设计到仿真的全流程。

weixin_29081101的博客 542

Visio 2013 Professional密钥安装激活全攻略:版本匹配与故障排查

产品密钥是软件授权体系中的核心凭证,用于验证用户对软件的使用权限。在微软Office产品线中,Visio 2013 Professional采用25位字符的密钥机制,通过联网或电话方式完成激活。正确使用密钥不仅能确保软件功能完整,还能避免因授权问题导致的工作中断。对于企业IT运维和个人用户而言,掌握密钥类型辨析、安装包匹配规则以及激活失败排查方法,是保障老版本软件稳定运行的关键。本文围绕Visio 2013 Professional,详细讲解密钥输入、激活流程及常见错误代码处理,帮助读者高效完成部署与维护。

weixin_28487433的博客 330

Leetcode #56. Merge Intervals 间隔合并 解题报告

1 解题思想这道题虽然标记的是Hard,但是我觉得至多Middle的难度吧,题目是给了很多区间,中间可能有重叠,现在就让你将他进行合并。首先对于这个问题,我们肯定要排序!按照什么排序么?,注意到我们是要将区间进行合并,主要是按照开始位置进行排序,所以我们按照每个区间的开头位置进行排序。排好序后,我们可以从第一个位置开始遍历,维护一个初始的位置信息[start,end],这个位置信息就是排序后的排名第

MebiuW的专栏 2809

变焦跟踪理论基础(如何在变焦过程中保持清晰)

如何在整个变焦过程中一直保持图像的清晰度或焦点是变焦跟踪的主要挑战。 当用户在缩放跟踪的情况下改变缩放时,设备保持对焦。 然而,在没有变焦跟踪的情况下,图像变得失焦,图像在变焦跟踪后由于自动对焦(AF)算法才最终对焦。...................................................

ChenYX的博客 20万+

Leetcode025--合并区间

对区间进行合并

蜕变的快乐 1063

【Settings随记:二】一级菜单,二级菜单的添加与隐藏,添加辅助功能

首先会去调用父类的onCreatePreferences(Bundle savedInstanceState, String rootKey)方法,然后调用addPreferencesFromResource(R.xml.assistant_function)方法(这个方法是父类的)加载二级菜单的xml配置文件,实现创建二级菜单,这个配置文件路径在res/xml/assistant_function.xml。controller:该item的控制器,控制它的内容展示,是否可用,也可以控制它的点击事件等。

镇元子的博客 1595

Allegro174版本如何关闭模块复用后铜皮自动从动态变成静态操作指导

在用Allegro进行PCB设计的时候,模块复用是使用的十分频繁的操作,当Allegro升级到了174 S034版本的时候,当使用模块复用的功能的时候,模块内的铜皮会自动动静转换,大部分情况是不需要的。版本如何关闭模块复用后铜皮自动从动态变成静态操作指导。如何关闭这个功能,具体操作如下。

weixin_54787054的博客 1259

leetCode 56.Merge Intervals (合并区间) 解题思路和方法

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]. 思路:题意很明确,首先对各区间按开始来排序,最后遍历,如

Android进阶 3081

MATLAB船舶开尔文尾迹三维仿真建模

开尔文尾迹介绍 Kelvin最早研究舰船在水面运动在水面上形成波纹的原理,主要针对静水中点源运动的尾迹问题,并给出尾迹的张角和波高分布情况。由 Kelvin 的理论,一般情况下假设由一个理想点源来代替舰船,开尔文尾迹由分歧波和横断波组成,分歧波向船的两侧扩散,而横断波主要向船的后方传播,在相遇的地方两波相干形成尖头波,且尖头波位于尾迹角16°到19.5°之间,又因为尖头波波长过短,以至于无法单独的区分出每个尖头波的波前,所有的波前在视觉效果上就连成一条直线表现为亮线,称为开尔文臂,开尔文臂以船身对称,且角度

qq_19512613的博客 3844

Merge Intervals @LeetCode

Ref : http://fisherlei.blogspot.com/2013/04/leetcode-merge-intervals-solution.html

Fight for your dream 1296

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【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]. 【解析】 题意:有很多个区间,把有重叠的区间合并。 思路:先排序,然后检查相邻两

跳出温水的青蛙 5976

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

leetcode 56.合并区间(python)

leetcode 56.合并区间(python) 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 输入: intervals = [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: intervals = [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。 **注意:**输入类型

pureszgd的博客 664

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

合并区间-lintcode

步骤: 1.先对vector排序。 2.再按要求合并。 用到的知识:sort存在于algorithm头文件中; vector的erase()的参数是迭代器。 C++代码: /** * Definition of Interval: * classs Interval { * int start, end; * Interval(int start, int end

u014257954的专栏 556

LeetCode 56. 合并区间(C++、python)

给出一个区间的集合,请合并所有重叠的区间。 示例 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] 可被视为重叠区间。...

qq_27060423的博客 414

【leetcode】No.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] overlap...

fisty 300

Java 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]. Thoughts of This Problem The key to solve th

Hello Eclipse Plugin 黑夜 2736

第八天:《LeetCode一天一例》-----区间的合并(python实现)

区间的合并 题目:[[2, 5], [1, 3], [5, 9], [10, 29], [12, 20]] 这个列表中嵌套了好多列表,里面的每一个列表代表一个区间。。我们要将它们合并。 看下图: 分别画出是哪个区间的位置,然后公共的位置合并 。。最后三个区间合并为一个区间。。后面两个也可以采用相同思路 分析: 我们这里先将各个区间按...

shawroad的博客 758

56. Merge Intervals合并中间的数Python

给定间隔的集合,合并所有重叠的间隔。每个sublist都有两个数,并且左侧小于等于右侧。 Input:intervals = [[1,3],[2,6],[8,10],[15,18]] Output:[[1,6],[8,10],[15,18]] [1,3],[2,6]重叠,合并成[1,6] Input:[[1,4],[4,5]] Output:[[1,5]] Method 1 对原list进行合并操作 1. 将list排序之后遍历每个list里面的子集 intervals=sorted(in.

weixin_44516745的博客 453

python输入两个数值区间若能合并区间_【python-leetcode56-区间合并】合并区间

导读热词问题描述:给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,18]]解释: 区间 [1,3] 和 [2,6] 重叠,将它们合并为 [1,6].示例2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。这题之间看过,今天又看到了,大致知道是先要...

weixin_26757949的博客 839

LeetCode-56 Merge Intervals(合并区间)

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

你若嘻哈过盛,别人就不再欣赏你的认真 797

合并区间 给定一个区间集合,合并里面重叠的区间,并返回新的不含重叠区间的集合。public class num8 { public ArrayList<Interval> merge(ArrayLi

public class num8 { public ArrayList merge(ArrayList intervals){ ArrayList res = new ArrayList(); if(intervals == null || intervals.isEmpty()) return res; Comparator comparator = new Comparator()

zcf396720的专栏 1427

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] 可被视为重叠区间。...

qq_26410101的博客 159
上一篇: ZigZag Conversion 把一个字符串转为zigzag的表示形式@LeetCode
下一篇: Binary Tree Maximum Path Sum 二叉树最大路径和 @LeetCode
chiiis
博客等级 码龄14年 422粉丝 429原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值