区间合并:区间合并问题

区间合并:区间合并问题

区间合并

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);
    }
}
相关推荐
biter down3 小时前
14:pytest-order 插件 顺序控制案例
开发语言·python·pytest
郝学胜-神的一滴3 小时前
Qt 高级开发 009: C++ Lambda 表达式
开发语言·c++·qt·软件构建
星栈独行3 小时前
我在 Rust 全栈项目里用 JWT 做无状态认证
开发语言·后端·rust·前端框架·开源·github·web
Lei活在当下3 小时前
先用起来,再理解,关于协程Coroutine应该知道的事
android·java·jvm
石山代码3 小时前
C++ 轻量级日志系统
开发语言·c++
Java爱好狂.3 小时前
Java程序员体系化学习路线(2026最新版)
java·后端·java面试·java架构师·java程序员·java八股文·java学习路线
tongluowan0074 小时前
以ReentrantLock为例解释AQS的工作流程
java·模板方法模式·aqs·reentrantlock
小技与小术4 小时前
玩转Flask
开发语言·python·flask
SilentSamsara4 小时前
Python 性能优化:tracemalloc、profiling 与 C 扩展加速
开发语言·python·青少年编程·性能优化
冰小忆4 小时前
大驼峰命名规范和小驼峰命名规范的区别是什么?
开发语言·python