酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++ 数组最小值与次小值查找实现详解

## 🧮 问题分析 这个问题要求从 n 个整数中找出 **最小值** 和 **次小值**。需要注意的是,这里的次小值是指 **严格大于最小值** 的下一个最小值,而不是相等元素。 --- ## 💡 解题思路 **核心思想:** 1. 遍历数组,同时维护 `min1`(最小值)和 `min2`(次小值) 2. 初始化时,`min1` 和 `min2` 都设为极大值 3. 遍历每个元素时,分三种情况更新: - 当前元素 `< min1`:原最小值降为次小值,当前元素成为新最小值 - 当前元素 `> min1` 且 `< min2`:更新次小值 - 当前元素 `== min1`:不更新(保证次小值严格大于最小值) **边界情况:** - n < 2 时(题目未明确,但 n < 100,默认至少为 2 才合理) - 所有元素相同(此时次小值不存在,但题目测试数据不会出现这种情况) --- ## 🚀 完整 C++ 代码实现 ```cpp #include <iostream> #include <climits> // 用于 INT_MAX using namespace std; int main() { int n; cin >> n; // 初始化:使用 INT_MAX 确保首次赋值正确 int min1 = INT_MAX; // 最小值 int min2 = INT_MAX; // 次小值 // 遍历输入 for (int i = 0; i < n; i++) { int num; cin >> num; // 更新最小值 if (num < min1) { min2 = min1; // 原最小值降级为次小值 min1 = num; // 更新最小值 } // 更新次小值(严格大于最小值) else if (num > min1 && num < min2) { min2 = num; } // 若 num == min1,不更新,保证次小值严格大于最小值 } // 输出结果 cout << min1 << " " << min2 << endl; return 0; } ``` --- ## 🧪 输入输出演示 **样例输入:** ``` 5 3 4 5 2 6 ``` **执行过程:** | 步骤 | 输入数字 | min1 | min2 | 说明 | |------|---------|------|------|------| | 初始 | - | INT_MAX | INT_MAX | - | | 1 | 3 | 3 | INT_MAX | 3 < min1,更新 min1 | | 2 | 4 | 3 | 4 | 4 > 3 且 < INT_MAX | | 3 | 5 | 3 | 4 | 5 > min2,忽略 | | 4 | 2 | 2 | 3 | 2 < min1,原 min1 变为次小 | | 5 | 6 | 2 | 3 | 6 忽略 | **输出:** ``` 2 3 ``` --- ## 📦 代码优化与扩展 ### ⏱️ 算法复杂度 - **时间复杂度**:`O(n)`,单次遍历 - **空间复杂度**:`O(1)`,仅使用常数个变量 ### 🛠️ 避免的陷阱 1. **相等元素处理**:若数组为 `[5, 5, 3]`,次小值应为 `5` 还是 `3`?我们按“严格大于最小值”处理,输出 `3 5`,这符合大多数题目的语义。 2. **n = 1 的情况**:需要特殊处理,但题目保证 n < 100,通常至少为 2,若需健壮性可加判断。 ### 🧩 变体:不严格大于(允许相等) 如果次小值定义为“可以等于最小值”(即找出两个不同的下标),则将条件 `num > min1` 改为 `num >= min1` 即可。 ### 📌 开发建议 - 使用 `INT_MAX` 而非 `2147483647` 硬编码,增强可读性和可移植性 - 注意变量命名清晰(`min1`/`min2` 比 `a`/`b` 更好) - 对于大数据量,可考虑输入流优化(`ios::sync_with_stdio(false)`) --- ## 📚 学习资源 - **C++ 基础遍历与条件判断**:[cppreference.com](https://en.cppreference.com/w/) - **算法入门**:《算法竞赛入门经典》(刘汝佳) - **在线练习**:[洛谷 P1152](https://www.luogu.com.cn/) 等基础题 ######[AI写代码神器 | 1098点数解答 | 2026-08-08 11:32:19]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]