这是 LeetCode 715. Range Module 标准、高效、可直接提交的 Java 实现,用 TreeMap 维护区间,代码简洁清晰。

java

import java.util.*;

class RangeModule {
private TreeMap<Integer, Integer> map;

public RangeModule() {
    map = new TreeMap<>();
}

// 添加区间 [left, right)
public void addRange(int left, int right) {
    Integer start = map.floorKey(left);
    if (start != null && map.get(start) >= left) {
        left = start;
    }

    Integer end = map.floorKey(right);
    if (end != null && map.get(end) > right) {
        right = map.get(end);
    }

    // 清除被覆盖的区间
    map.subMap(left, true, right, false).clear();
    map.put(left, right);
}

// 查询 [left, right) 是否完全被覆盖
public boolean queryRange(int left, int right) {
    Integer start = map.floorKey(left);
    if (start == null) return false;
    return map.get(start) >= right;
}

// 移除区间 [left, right)
public void removeRange(int left, int right) {
    Integer end = map.floorKey(right);
    if (end != null && map.get(end) > right) {
        map.put(right, map.get(end));
    }

    Integer start = map.floorKey(left);
    if (start != null && map.get(start) > left) {
        map.put(start, left);
    }

    // 清除被删除的区间
    map.subMap(left, true, right, false).clear();
}

}

核心思路

  • 用 TreeMap<Integer, Integer>:
  • key  = 区间左端点
  • value  = 区间右端点
  • 所有操作都是 O(log n):
  • addRange :合并重叠/相邻区间
  • queryRange :查是否被一个完整区间覆盖
  • removeRange :拆分区间并删除中间段

直接复制提交即可通过全部用例。

需要我给你逐行讲解,或者画一下区间合并/删除的过程图吗?

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐