花园浇水次数统计:区间操作与查询算法详解
我来帮你分析这个问题。 ## 🧮 问题理解 - 有 `n` 朵花,编号从 1 到 n。 - 进行 `q` 轮浇水,每轮给区间 `[L, R]` 的每朵花增加 `x` 次浇水次数。 - 最后查询某个区间 `[a, b]` 的**每朵花浇水次数之和**(即区间内每朵花的浇水次数累加)。 ## 📊 数据范围 - n < 100 - 这意味着我们可以用简单的方法实现。 ## 💻 解决方案 ### 方法1:直接模拟 用一个数组记录每朵花的浇水次数,每次浇水操作直接遍历区间累加,最后查询时再遍历区间求和。 ```java import java.util.Scanner; public class FlowerWatering { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 输入花朵数量 int n = sc.nextInt(); int[] flowers = new int[n + 1]; // 下标从1开始 // 输入浇水轮数 int q = sc.nextInt(); // 处理浇水操作 for (int i = 0; i < q; i++) { int L = sc.nextInt(); int R = sc.nextInt(); int x = sc.nextInt(); // 给区间[L, R]的每朵花增加x次浇水 for (int j = L; j <= R; j++) { flowers[j] += x; } } // 输入查询区间 int a = sc.nextInt(); int b = sc.nextInt(); // 计算区间[a, b]的每朵花浇水次数之和 int sum = 0; for (int i = a; i <= b; i++) { sum += flowers[i]; } // 输出结果 System.out.println(sum); sc.close(); } } ``` ### 方法2:差分数组优化 如果浇水轮数很多,可以用差分数组优化浇水操作。 ```java import java.util.Scanner; public class FlowerWateringOptimized { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] diff = new int[n + 2]; // 差分数组,多开一位防止越界 int q = sc.nextInt(); // 使用差分处理浇水操作 for (int i = 0; i < q; i++) { int L = sc.nextInt(); int R = sc.nextInt(); int x = sc.nextInt(); diff[L] += x; diff[R + 1] -= x; } // 通过前缀和还原每朵花的浇水次数 int[] flowers = new int[n + 1]; for (int i = 1; i <= n; i++) { flowers[i] = flowers[i - 1] + diff[i]; } // 输入查询区间 int a = sc.nextInt(); int b = sc.nextInt(); // 计算区间和 int sum = 0; for (int i = a; i <= b; i++) { sum += flowers[i]; } System.out.println(sum); sc.close(); } } ``` ## ⚡ 复杂度分析 - **方法1**:每次浇水操作 O(R-L+1),总复杂度 O(q × 区间长度)。n<100,完全可行。 - **方法2**:浇水操作 O(1),还原数组 O(n),查询 O(区间长度)。更高效。 ## 🎯 示例运行 输入: ``` 5 3 1 3 2 2 4 1 3 5 3 2 4 ``` 过程: 1. 浇水后每朵花次数:[2, 3, 6, 4, 3] 2. 查询区间[2,4]:3 + 6 + 4 = 13 输出: ``` 13 ``` ## 📝 注意事项 1. 数组下标从1开始,方便对应花朵编号。 2. 浇水次数可能累加得很大,使用`int`类型足够。 3. 如果n更大,需要使用方法2的差分优化。 ######[AI问答 | 955点数解答 | 2026-03-20 21:59:55]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)350
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)240
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)248
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)240
- Python实现Q老师成绩管理任务:修改与查看学生成绩(字节豆包 | 191点数解答 | 2025-12-20 20:55:41)68
- Python 代码助力 Q 老师高效管理班级学生成绩:修改与查看一键搞定(字节豆包 | 326点数解答 | 2025-12-27 20:48:12)69
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)226
- 补全含错误代码:Vue结合Element UI组件实现查询、新增及表格展示功能 ( | 400点数解答 | 2023-12-19 15:20:50)430
- 单线程频繁查ClickHouse致CPU飙升?这些优化方案速看!(DeepSeek | 491点数解答 | 2025-02-13 17:49:54)227
- MySQL:巧用 NOT LIKE 查询字段不包含特定字符串及注意要点 (DeepSeek | 264点数解答 | 2025-02-13 18:25:01)178
- C++实现:输入整数英文单词算乘积,输出数字与英文结果,可多次计算!(GPT | 2268点数解答 | 2024-05-24 01:55:27)389
- 用 Pandas 深度剖析数据:从读取到统计分析全流程实战(GPT | 642点数解答 | 2024-06-30 15:39:49)354