题解
求n个整数的最小值
1 条题解
-
0
解题思路
求 n 个整数的最小值,和"打擂台找最大值"是同一个思路,只是把"更大"改成"更小":
- 先读入第一个数当擂主(当前最小值 mn);
- 循环读入剩下的数,每个数都来挑战;
- 如果这个数比当前最小值还小,就更新最小值;
- 所有数读完后,mn 就是最小值。
写代码时最容易犯的错是把"小于"写成"大于",那样求出来的就是最大值了。找最小值一定要用 x < mn 来判断。
另外注意:虽然题目没有直接给出数值范围,但这类题通常是 int 范围内的整数,用 int 类型足够。
参考代码
#include <iostream> using namespace std; int main() { int n; // n:整数的个数 cin >> n; // 读入个数 n int mn; // mn:当前的最小值(擂主) cin >> mn; // 先读入第一个数,让它当擂主 for (int i = 2; i <= n; i++) { // 从第二个数开始挑战 int x; // x:当前读入的一个整数 cin >> x; // 读入这个数 if (x < mn) { // 如果它比当前最小值还小 mn = x; // 更新最小值 } } cout << mn << endl; // 输出最小值 return 0; }复杂度分析
循环 n-1 次,每次做一次比较,时间复杂度是 O(n),其中 n 是输入的整数个数。只用了 n、mn、i、x 几个固定变量,空间复杂度 O(1)。
- 1