Blage's Coding Blage's Coding
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
Home
算法
  • 手写Spring
  • SSM
  • SpringBoot
  • JavaWeb
  • JAVA基础
  • 容器
  • Netty

    • IO模型
    • Netty初级
    • Netty原理
  • JVM
  • JUC
  • Redis基础
  • 源码分析
  • 实战应用
  • 单机缓存
  • MySQL

    • 基础部分
    • 实战与处理方案
    • 面试
  • ORM框架

    • Mybatis
    • Mybatis_Plus
  • SpringCloudAlibaba
  • MQ消息队列
  • Nginx
  • Elasticsearch
  • Gateway
  • Xxl-job
  • Feign
  • Eureka
  • 面试
  • 工具
  • 项目
  • 关于
🌏本站
🧸GitHub (opens new window)
  • 数组

    • 搜索

    • 二分查找

    • 排序

    • 边界判断

      • 54.螺旋矩阵
      • 498.对角线遍历
      • 59.螺旋矩阵Ⅱ
      • 48. 旋转图像
      • 6425. 找到最长的半重复子字符串
      • 135. 分发糖果
      • 715. Range 模块
        • 1.边界范围判断
      • 剑指offer13
    • 双指针法

    • 连续子数组

    • 差分数组

    • 模拟

    • 区间问题

  • 链表

  • 字符串

  • 二叉树

  • 动态规划

  • 深搜回溯

  • 数学贪心

  • 堆栈队列

  • 前缀和

  • 算法设计

  • 位运算

  • WA

  • 算法
  • 数组
  • 边界判断
phan
2023-11-13
目录

715. Range 模块

# 715. Range 模块 (opens new window)

# 1.边界范围判断

思路简单,但是边界条件比较容易写错。

  • addRange:涉及到模块的删除与合并。思路先确定插入新模块的左边界,然后找到右边界遍历的过程中删除子包含模块。
  • queryRange:涉及到模块的分裂。
class RangeModule {
    List<int[]> list;
    public RangeModule() {
        list=new ArrayList<>();
    }
    
    public void addRange(int left, int right) {
        if(list.size()==0){
            list.add(new int[]{left, right});
            return;
        }
        boolean check=false;
        for(int i=0;i<list.size();i++){
            int l=list.get(i)[0];
            int r=list.get(i)[1];
            if(r<left) continue;
            else{
                //确定新插入范围的left左边界
                left=Math.min(left,l);
                while (i<list.size()) {
                    int tmpleft=list.get(i)[0];
                    int tmpright = list.get(i)[1];
                    if(tmpleft>right) break;
                    else{
                        right=Math.max(right,tmpright);
                        list.remove(i);
                    }
                }
                check = true;
                list.add(i, new int[]{left, right});
                return;
            }
        }
        //插入到尾节点
        if(!check) list.add(new int[]{left, right});
    }

    public boolean queryRange(int left, int right) {
        for (int i = 0; i < list.size(); i++) {
            int tmpleft = list.get(i)[0];
            int tmpright = list.get(i)[1];
            if(tmpleft<=left&&tmpright>=right) return true;
        }
        return false;
    }

    public void removeRange(int left, int right) {
        for (int i = 0; i < list.size(); i++) {
            int tmpleft = list.get(i)[0];
            int tmpright = list.get(i)[1];
            if(tmpleft>=left&&tmpright<=right)list.remove(i--);
            else if (tmpleft < left && tmpright > right) {
                list.get(i)[1] = left;
                list.add(i+1, new int[]{right, tmpright});
                i++;
                continue;
            }
            else if(tmpleft<left&&tmpright>left) list.get(i)[1] = left;
            else if(tmpleft<right&&tmpright>right) list.get(i)[0] = right;
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
编辑 (opens new window)
#Leetcode#边界判断
上次更新: 2023/12/15, 15:49:57
135. 分发糖果
剑指offer13

← 135. 分发糖果 剑指offer13→

Theme by Vdoing | Copyright © 2023-2024 blageCoder
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式