C++实现数组最小值与次小值查找算法解析
根据题目要求,我们需要从n个整数中找出**最小值**和**次小值**。这里需要注意的是,次小值可能等于最小值(如果存在重复的最小值),但通常题目默认要求是不同的两个数,以下实现会区分处理。 ## 🧠 解题思路 1. 读入整数n和n个数组元素。 2. 初始化`min1`(最小值)和`min2`(次小值)为较大值(如`INT_MAX`)。 3. 遍历数组: - 若当前数小于`min1`,则`min2 = min1`,`min1 = 当前数`。 - 否则,若当前数大于`min1`但小于`min2`,则更新`min2`。 4. 输出`min1`和`min2`。 > **注意**:如果所有数字都相同,则次小值没有意义,但题目未明确说明,一般假设存在至少两个不同的数,或者按上述逻辑处理。 --- ## 💻 C++ 实现 ```cpp #include <iostream> #include <climits> using namespace std; int main() { int n; cin >> n; 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 < min2 && num != min1) { // 确保不把重复的最小值当作次小值 min2 = num; } } cout << min1 << " " << min2 << endl; return 0; } ``` --- ## ✅ 代码解释 - **`#include <climits>`**:提供`INT_MAX`,作为初始的“无穷大”值。 - **`min1`** 与 **`min2`** 初始化为`INT_MAX`,保证第一次比较正确。 - **循环逻辑**: - 当`num`比`min1`小时,说明找到了新的最小值,原最小值降为次小值。 - 当`num`介于`min1`和`min2`之间,且不等于`min1`时,更新`min2`。 - 复杂度的**O(n)**,只遍历一次数组,空间复杂度**O(1)**。 --- ## 🚨 细节处理 - **重复值情况**:如果数组有多个相同的最小值(如`2 2 3`),上述代码会输出`2 3`,因为第二个`2`不小于`min1`(相等),且不满足`num < min2`(因为`2`不小于当前`min2`),所以不会错误更新次小值。 - **n<100**:题目限制n小于100,使用普通int完全足够,无需特殊处理。 - **边界情况**:如果n为1,程序仍能执行,但次小值会输出`INT_MAX`,这不算合理输出。根据题意,n至少为2是合理的,如果担心,可加判断。 --- ## 🛠️ 测试与分析 **输入样例** ``` 5 3 4 5 2 6 ``` **输出** ``` 2 3 ``` **其他测试** - 输入:`4\n1 1 1 1` → 输出:`1 2147483647`(次小值未定义,但不影响主要功能) - 输入:`3\n5 3 4` → 输出:`3 4` --- ## 📌 开发建议 - **可读性**:命名`min1`和`min2`直观清晰,注释尽量保留。 - **鲁棒性**:可以增加对`n<2`的判断,避免输出异常值。 - **扩展性**:若数组非常大(如百万级),可考虑使用`std::partial_sort`或`std::nth_element`,但本题n<100,简单遍历最佳。 --- ######[AI写代码神器 | 911点数解答 | 2026-08-09 10:42:54]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)558
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)396
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)416
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)91
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)473
- C++ 实现:合并 k 个有序数组并求所有数的中位数(附代码及复杂度分析) (阿里通义 | 203点数解答 | 2023-11-09 00:50:21)277
- 2023 - 2024 年中国制造业与非制造业 PMI 数据深度剖析:为政策与决策提供参考 (讯飞星火 | 54点数解答 | 2024-12-17 09:25:02)180
- 深挖2023 - 2024年中国制造业与非制造业PMI数据:多元统计剖析经济运行特点 (讯飞星火 | 235点数解答 | 2024-12-17 09:25:13)158
- Python 实现:输入三个数并输出最大、最小及平均值,附异常处理要点(字节豆包 | 210点数解答 | 2025-01-25 12:23:39)244
- 地下水及地基土腐蚀性分析:从代码优化到逻辑完善的全面攻略(DeepSeek | 498点数解答 | 2025-06-08 21:49:49)273
- 使用 C++ 找出全息偶像总决选人气最稳定的偶像(字节豆包 | 502点数解答 | 2026-03-08 10:20:28)53
- 礼盒多级排序:总价→最贵→最便宜→编号的 Python 实现与详解(阿里通义 | 1000点数解答 | 2026-03-16 12:13:21)98