区间合并:区间合并问题

区间合并:区间合并问题

区间合并

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);
    }
}
相关推荐
像风一样的男人@5 分钟前
python --货车装厢问题
开发语言·python
一切顺势而行7 分钟前
kafka总结
java
Humbunklung12 分钟前
Rust枚举:让数据类型告别单调乏味
开发语言·后端·rust
Y1nhl15 分钟前
力扣_链表_python版本
开发语言·python·算法·leetcode·链表·职场和发展
OEC小胖胖29 分钟前
深入理解 Vue.js 响应式原理及其在 Web 前端开发中的应用
开发语言·前端·javascript·vue.js·web
qq_4017004131 分钟前
C语言中位运算以及获取低8位和高8位、高低位合并
c语言·开发语言·算法
CoovallyAIHub34 分钟前
YOLO模型优化全攻略:从“准”到“快”,全靠这些招!
深度学习·算法·计算机视觉
yanjiaweiya35 分钟前
云原生-集群管理
java·开发语言·云原生
闻缺陷则喜何志丹40 分钟前
【BFS】 P10864 [HBCPC2024] Genshin Impact Startup Forbidden II|普及+
c++·算法·宽度优先·洛谷
gadiaola44 分钟前
【JavaSE面试篇】Java集合部分高频八股汇总
java·面试