差分数组求区间多次累加后的最大值(Java实现)
这个问题可以用**差分数组 + 前缀和**来高效解决。因为 `n <= 99` 和 `q` 不限,但使用差分数组既能处理任意规模的 `q`,又能保持 O(n + q) 的时间复杂度。 ## 🧹 解题思路 差分数组 `diff` 的特点是: 对区间 `[L, R]` 增加 `x`,只需要: - `diff[L] += x` - `diff[R+1] -= x` 最后通过前缀和还原每个区域的干净度,然后取最大值即可。 ## 📐 算法步骤 1. 初始化大小为 `n+2` 的差分数组 `diff`(防止 R+1 越界)。 2. 对于每次打扫 `[L, R]` 加 `x`: - `diff[L] += x` - `diff[R+1] -= x` 3. 计算前缀和,得到每个区域的实际干净度。 4. 遍历所有区域,找出最大值并输出。 ## 💻 Java 代码实现 ```java public class CleanestArea { public static void main(String[] args) { int n = 99; // 区域总数 int q = 5; // 打扫次数(示例) // 模拟输入数据:每次打扫 [L, R] 和 xi int[][] cleans = { {1, 10, 3}, {5, 20, 2}, {15, 30, 4}, {25, 50, 1}, {45, 60, 5} }; // 差分数组,长度 n+2 防止越界 int[] diff = new int[n + 2]; // 应用差分 for (int[] clean : cleans) { int L = clean[0]; int R = clean[1]; int x = clean[2]; diff[L] += x; diff[R + 1] -= x; } // 前缀和还原并找最大值 int maxClean = 0; int current = 0; for (int i = 1; i <= n; i++) { current += diff[i]; if (current > maxClean) { maxClean = current; } } System.out.println("最干净区域的干净度是:" + maxClean); } } ``` ## ✅ 复杂度分析 - 时间复杂度:O(n + q) - 空间复杂度:O(n) ######[AI问答 | 569点数解答 | 2026-06-20 22:37:46]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)389
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)277
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)282
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)271
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)465
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)370
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1321
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)471
- 地下水及地基土腐蚀性分析:从代码优化到逻辑完善的全面攻略(DeepSeek | 498点数解答 | 2025-06-08 21:49:49)246
- 礼盒多级排序:总价→最贵→最便宜→编号的 Python 实现与详解(阿里通义 | 1000点数解答 | 2026-03-16 12:13:21)58
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)52
- "Java Code: Uncovering Stock Statistics through CSV File Reading"(字节豆包 | 66点数解答 | 2024-11-13 15:31:04)377