top1编程
← 返回题目
题解

n个整数“打擂台”

1 条题解

  • 0
    @ 2026-8-4 14:03:51

    解题思路

    这道题要求 n 个整数中的最大值,用的方法叫"打擂台",就像运动会上的擂台赛:

    1. 先让第一个数当擂主,把它的值记到变量 mx 里;
    2. 从第二个数开始,每个数都来"挑战"擂主;
    3. 如果这个数比擂主还大,它就取代擂主的位置(更新 mx);
    4. 如果它不比擂主大,擂主不变;
    5. 所有数都比完后,最后站在台上的擂主 mx 就是最大值。

    为什么要让第一个数当擂主?因为擂台上一开始必须有个人站着。直接拿第一个数当擂主,后面的数依次来挑战,就一定能找出最大的。注意循环要从第 2 个数开始(i=2),因为第 1 个数已经读过并当了擂主。

    代码里先单独读入第一个数 mx,再用 for 循环读剩下的 n-1 个数,每个数与 mx 比较,比它大就更新。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;              // n:整数的个数
        cin >> n;           // 读入个数 n
        int mx;             // mx:当前的最大值(擂主)
        cin >> mx;          // 先读入第一个数,让它当擂主
        for (int i = 2; i <= n; i++) {   // 从第二个数开始挑战
            int x;          // x:当前读入的一个整数
            cin >> x;       // 读入这个数
            if (x > mx) {   // 如果它比擂主还大
                mx = x;     // 它就成为新的擂主
            }
        }
        cout << mx << endl; // 输出最终的最大值
        return 0;
    }
    

    复杂度分析

    程序循环 n-1 次,每次只做一次比较和可能的赋值,所以时间复杂度是 O(n)。这里 n 表示题目中整数的个数:数的个数越多,需要的比较次数就越多,成正比关系。只用了 n、mx、i、x 几个固定变量,空间复杂度是 O(1)。

    • 1