二分查找算法:求解水流最大速度的高效方法
### 📝思路分析 根据题目描述,水流速度先上升后下降,要找到最大速度。可以使用二分查找的方法,通过比较中间元素与其相邻元素的大小关系,来缩小查找范围,直到找到最大速度。 ### 💻代码实现 ```cpp #include <iostream> using namespace std; int a[100005], n, l, r, mid; int main() { // 输入记录速度的次数 cin >> n; // 输入每次的水流速度 for (int i = 1; i <= n; i++) { cin >> a[i]; } // 初始化左右边界 l = 1, r = n; // 二分查找最大速度 while (l <= r) { // 计算中间位置 mid = (l + r) / 2; // 如果中间元素大于其下一个元素,说明最大速度在左半部分 if (a[mid] > a[mid + 1]) { r = mid - 1; } // 如果中间元素小于其下一个元素,说明最大速度在右半部分 else if (a[mid] < a[mid + 1]) { l = mid + 1; } } // 最终l指向最大速度的位置 cout << a[l] << endl; return 0; } ``` ### 📚代码解释 1. **输入处理**:首先读取记录速度的次数`n`,然后读取`n`个水流速度并存储在数组`a`中。 2. **二分查找**:使用二分查找算法,初始化左右边界`l`和`r`分别为 1 和`n`。在每次循环中,计算中间位置`mid`,并比较`a[mid]`和`a[mid + 1]`的大小。 - 如果`a[mid] > a[mid + 1]`,说明最大速度在左半部分,更新右边界`r = mid - 1`。 - 如果`a[mid] < a[mid + 1]`,说明最大速度在右半部分,更新左边界`l = mid + 1`。 3. **输出结果**:最终`l`指向最大速度的位置,输出`a[l]`。 ### ######[AI问答 | 569点数解答 | 2026-05-31 13:59:42]
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)367
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)331
- Java 实战:Vehicle 类与 User 类实现机动车速度功率控制( | 968点数解答 | 2024-03-12 11:26:25)575
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)187
- 高考毕业晚会难题:从学生能力值求最大默契程度的Python解法(字节豆包 | 487点数解答 | 2026-01-24 13:10:18)67
- Java 实战:动物类、接口与继承实现鸟儿吃虫和飞翔功能(字节豆包 | 183点数解答 | 2024-09-19 15:53:55)322
- Java 实战:动物类、接口与继承,实现鸟儿吃虫与飞翔功能(字节豆包 | 184点数解答 | 2024-09-19 16:45:48)337
- Java 实现 BankAccount 类:账户余额管理与测试全解析(字节豆包 | 420点数解答 | 2024-10-11 08:48:21)343
- Java 编程:实现教师与学生类的创建、继承及属性操作(字节豆包 | 745点数解答 | 2024-10-16 18:40:42)428
- Java 实现 Circle 类:全面封装圆的属性与方法(字节豆包 | 256点数解答 | 2024-10-27 16:34:37)267
- Java 实现继承关系:Fu 类、Zi 类与测试类 Example04 代码解析及注意要点(字节豆包 | 251点数解答 | 2024-12-12 09:36:45)266
- Java实现银行账户类:含账户余额操作与测试代码(DeepSeek | 711点数解答 | 2025-03-23 21:38:57)281