top1编程
← 返回题目
题解

最大跨度值

1 条题解

  • 0
    @ 2026-8-4 21:06:23

    解题思路

    最大跨度值 = 最大值 − 最小值。所以这道题其实要我们同时找到 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