区间合并:区间合并问题

区间合并:区间合并问题

区间合并

www.acwing.com/problem/content/805/

  1. 按区间的左端点排序

  2. 扫描整个区间,在这过程中把可能有交点的区间合并

    1. 全包含:不做改动
    2. 相交:right 后移
    3. 相离:更新至下一个维护区间
Java 复制代码
import java.util.*;

public class Main {
    static final int N = 100010;
    static Pair[] pairs = new Pair[N];
    
    static class Pair implements Comparable<Pair> {
        int l, r;
        public Pair(int l, int r) {
            this.l = l;
            this.r = r;
        }
        
        @Override
        public int compareTo(Pair o) {
            if (this.l == o.l) {
                return this.r - o.r;
            }
            return this.l - o.l;
        }
    } 
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            int l = sc.nextInt();
            int r = sc.nextInt();
            pairs[i] = new Pair(l, r);
        }
        
        Arrays.sort(pairs, 0, n);
        int result = 1;
        int right = pairs[0].r;
        for (int i = 1; i < n; i++) {
            if (pairs[i].l <= right) {
                // 合并区间
                right = Math.max(right, pairs[i].r);
            } else {
                // 新区间
                result++;
                right = pairs[i].r;
            }
        }
        System.out.println(result);
    }
}
相关推荐
张某布响丸辣19 分钟前
附件下载的安全边界:路径白名单、NAS 哨兵文件与 Redis Lua 一次性令牌
java·redis·redis lua·nas哨兵
YatHinLay1 小时前
Spring Boot + Calcite 实现跨库查询
java
wabs6661 小时前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
hanlin031 小时前
刷题笔记:力扣第41题-缺失的第一个正数
笔记·算法·leetcode
酷炫码神1 小时前
MosMos 创意效果与能力边界展示
java
Wang's Blog1 小时前
Java 接入Redis: 使用Jedis操作Redis
java·服务器·redis
事圆则缓2 小时前
Java 8 Lambda、Stream、Optional 与 Android 边界:从回调语法到运行时兼容
android·java
shehuiyuelaiyuehao2 小时前
算法50,分治归并,数组中的逆序对
java·算法
烽学长2 小时前
(附源码)基于Springboot+vue的图书阅读分享系统的设计与实现
java·spring boot·后端
Ivanqhz2 小时前
数据搬运是性能关键
java·服务器·网络·人工智能·深度学习