题解
最大跨度值
1 条题解
-
0
解题思路
最大跨度值 = 最大值 − 最小值。所以这道题其实要我们同时找到 n 个数里的最大值和最小值,再相减。
可以边读入边记录:先读入第一个数,让它同时当最大值 mx 和最小值 mn;然后循环读入剩下的数,每读到一个数 x 就做两次判断——如果 x 比 mx 大,更新 mx;如果 x 比 mn 小,更新 mn。所有数读完后,mx-mn 就是答案。
注意两个判断要分开写(两个 if),不要用 if-else,因为一个数有可能既不是最大值也不是最小值,但不会同时是最大值和最小值;当然,用两个独立的 if 是最稳妥的写法。
验证样例:6 个数 3 0 8 5 7 9,最大值是 9,最小值是 0,9−0=9,和样例一致。
参考代码
#include <iostream> using namespace std; int main() { int n; // n:整数的个数 cin >> n; // 读入个数 n int mx, mn; // mx:最大值;mn:最小值 cin >> mx; // 读入第一个数,先当作最大值 mn = mx; // 第一个数也当作最小值 for (int i = 2; i <= n; i++) { // 从第二个数开始 int x; // x:当前读入的一个整数 cin >> x; // 读入这个数 if (x > mx) { // 比最大值还大就更新最大值 mx = x; } if (x < mn) { // 比最小值还小就更新最小值 mn = x; } } cout << mx - mn << endl; // 最大跨度值 = 最大值 - 最小值 return 0; }复杂度分析
循环 n 次,每次做两次比较,时间复杂度是 O(n),其中 n 是整数的个数。空间上只用 n、mx、mn、i、x 几个变量,空间复杂度 O(1)。
- 1